前提
privateメソッドのテストをそもそも書くべきかは要検討!
privateメソッドのモック化やverifyの確認に詰まったので記しておきます。
テスト対象のクラス
Kotlin
class PrivateMethodClass {
fun publicMethod(): String {
privateMethodReturnNothing()
return privateMethodReturnString("test")
}
// 戻り値ありのprivateメソッド
private fun privateMethodReturnString(text: String): String {
return text
}
// 戻り値なしのprivateメソッド
private fun privateMethodReturnNothing() {
privateMethodReturnString("hoge")
}
}
テストコード
Kotlin
@Test
fun publicMethodTest() {
val privateMethodClass = spyk(PrivateMethodClass(), recordPrivateCalls = true)
// 戻り値ありのprivateメソッドのモック化
every {
privateMethodClass["privateMethodReturnString"](allAny<String>())
} returns "test"
// 戻り値ありのprivateメソッドのモック化
every {
privateMethodClass["privateMethodReturnNothing"]()
}.answers { nothing }
// テスト実施
assertEquals("test", privateMethodClass.publicMethod())
verify {
privateMethodClass["privateMethodReturnString"](allAny<String>())
privateMethodClass["privateMethodReturnNothing"]()
}
}