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

今日から始めるAndroid Unit Test

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

今日から始めるAndroid Unit Test

Avatar for KKusumi

KKusumi

June 30, 2020

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” … }