Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今日から始めるAndroid Unit Test

今日から始めるAndroid Unit Test

KKusumi

June 30, 2020
Tweet

More Decks by KKusumi

Other Decks in Programming

Transcript

  1. About Me 2 • Katsumi Kusumi(@kl_tech) • and factory •

    Android App Engineer • ອըΞϓϦ࡞ͬͯ·͢ɻ
  2. 10 1. privateؔ਺Λςετ͢Δํ๏ class ViewModel { fun publicFunction() = "public"

    private fun privateFunction() = "private" } ▪͜͏͍͏ViewModelΛςετ͢Δ৔߹
  3. 11 1. privateؔ਺Λςετ͢Δํ๏ class ViewModel { fun publicFunction() = "public"

    private fun privateFunction() = "private" } ▪publicͷ৔߹ @Test fun publicTest() { val viewModel = ViewModel() assert(viewModel.publicFunction() == "public") }
  4. 12 1. privateؔ਺Λςετ͢Δํ๏ class ViewModel { fun publicFunction() = "public"

    private fun privateFunction() = "private" } ▪privateͷ৔߹ @Test fun privateTest() { val viewModel = ViewModel() assert(viewModel.privateFunction() == "private") }
  5. 14 1. privateؔ਺Λςετ͢Δํ๏ ▪ղܾࡦ →ؔ਺ͷisAccessibleΛtrueʹͯ͠ɺແཧ΍ΓΞΫηε͢Δɻ @Test fun privateTest() { val

    viewModel = ViewModel() val method = viewModel.javaClass.getDeclaredMethod( "privateFunction" ) method.isAccessible = true assert(method.invoke(viewModel) == "private") }
  6. 17 2. ؔ਺ͷݺͼग़͠ςετΛ࣮ࢪ͢Δํ๏ class UseCase { fun function1() = "Function1"

    fun function2() = "Function2" } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() } } ▫ؔ਺ͷதͰɺଞͷؔ਺ΛͪΌΜͱݺΜͰΔ͔֬ೝ͍ͨ͠ʂ
  7. 18 2. ؔ਺ͷݺͼग़͠ςετΛ࣮ࢪ͢Δํ๏ class UseCase { fun function1() = "Function1"

    fun function2() = "Function2" } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() } } @Test fun executeTest() { val useCase: UseCase = mockk() every { useCase.function1() } returns "Function1" every { useCase.function2() } returns "Function2" val viewModel = ViewModel(useCase) viewModel.execute() verify(exactly = 1) { useCase.function1() } verify(exactly = 1) { useCase.function2() } } ▫΍Γ͔ͨ঺հ
  8. 19 2. ؔ਺ͷݺͼग़͠ςετΛ࣮ࢪ͢Δํ๏ class UseCase { fun function1() = "Function1"

    fun function2() = "Function2" } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() } } @Test fun executeTest() { val useCase: UseCase = mockk() every { useCase.function1() } returns "Function1" every { useCase.function2() } returns "Function2" val viewModel = ViewModel(useCase) viewModel.execute() verify(exactly = 1) { useCase.function1() } verify(exactly = 1) { useCase.function2() } } ▫΍Γ͔ͨ঺հ
  9. 20 2. ؔ਺ͷݺͼग़͠ςετΛ࣮ࢪ͢Δํ๏ class UseCase { fun function1() = "Function1"

    fun function2() = "Function2" } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() } } @Test fun executeTest() { val useCase: UseCase = mockk() every { useCase.function1() } returns "Function1" every { useCase.function2() } returns "Function2" val viewModel = ViewModel(useCase) viewModel.execute() verify(exactly = 1) { useCase.function1() } verify(exactly = 1) { useCase.function2() } } ▫΍Γ͔ͨ঺հ
  10. 21 2. ؔ਺ͷݺͼग़͠ςετΛ࣮ࢪ͢Δํ๏ class UseCase { fun function1() = "Function1"

    fun function2() = "Function2" } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() } } @Test fun executeTest() { val useCase: UseCase = mockk() every { useCase.function1() } returns "Function1" every { useCase.function2() } returns "Function2" val viewModel = ViewModel(useCase) viewModel.execute() verify(exactly = 1) { useCase.function1() } verify(exactly = 1) { useCase.function2() } } ▫΍Γ͔ͨ঺հ
  11. 24 2. mockkΛγϯϓϧʹॻ͘ํ๏ ▫mockk͸ͱͬͯ΋ศར͚ͩͲɺॻ͘͜ͱ͕ଟ͍ʂ class UseCase { fun function1() =

    "Function1" fun function2() = "Function2" } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() } }
  12. 25 2. mockkΛγϯϓϧʹॻ͘ํ๏ ▫mockk͸ͱͬͯ΋ศར͚ͩͲɺॻ͘͜ͱ͕ଟ͍ʂ class UseCase { fun function1() =

    "Function1" fun function2() = “Function2" fun function3() { … } fun function4() { … } fun function5() { … } } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() useCase.function3() useCase.function4() useCase.function5() } }
  13. 26 2. mockkΛγϯϓϧʹॻ͘ํ๏ ▫mockk͸ͱͬͯ΋ศར͚ͩͲɺॻ͘͜ͱ͕ଟ͍ʂ class UseCase { fun function1() =

    "Function1" fun function2() = “Function2" fun function3() { } fun function4() { } fun function5() { } } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() useCase.function3() useCase.function4() useCase.function5() } } @Test fun executeTest() { val useCase: UseCase = mockk() every { useCase.function1() } returns "Function1" every { useCase.function2() } returns “Function2” every { useCase.function3() } returns Unit every { useCase.function4() } returns Unit every { useCase.function5() } returns Unit … }
  14. 27 2. mockkΛγϯϓϧʹॻ͘ํ๏ ▫mockk͸ͱͬͯ΋ศར͚ͩͲɺॻ͘͜ͱ͕ଟ͍ʂ class UseCase { fun function1() =

    "Function1" fun function2() = “Function2" fun function3() { } fun function4() { } fun function5() { } } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() useCase.function3() useCase.function4() useCase.function5() } } @Test fun executeTest() { val useCase: UseCase = mockk() every { useCase.function1() } returns "Function1" every { useCase.function2() } returns “Function2” every { useCase.function3() } returns Unit every { useCase.function4() } returns Unit every { useCase.function5() } returns Unit … }
  15. 28 2. mockkΛγϯϓϧʹॻ͘ํ๏ ▫ղܾࡦ class UseCase { fun function1() =

    "Function1" fun function2() = “Function2" fun function3() { } fun function4() { } fun function5() { } } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() useCase.function3() useCase.function4() useCase.function5() } } @Test fun executeTest() { val useCase: UseCase = mockk(relaxUnitFun = true) every { useCase.function1() } returns "Function1" every { useCase.function2() } returns “Function2” every { useCase.function3() } returns Unit every { useCase.function4() } returns Unit every { useCase.function5() } returns Unit … }
  16. 29 2. mockkΛγϯϓϧʹॻ͘ํ๏ ▫ղܾࡦ class UseCase { fun function1() =

    "Function1" fun function2() = “Function2" fun function3() { } fun function4() { } fun function5() { } } class ViewModel(val useCase: UseCase) { fun execute() { useCase.function1() useCase.function2() useCase.function3() useCase.function4() useCase.function5() } } @Test fun executeTest() { val useCase: UseCase = mockk(relaxUnitFun = true) every { useCase.function1() } returns "Function1" every { useCase.function2() } returns “Function2” … }