Closed1

Mockitoで直接依存していないクラスの振る舞いを変更したい

nologyancenologyance

まとめ

  • Mockを返すようにMockの振る舞いを定義してあげれば良い

課題感

Mockを使ったテストをしたいけど、テスト対象のクラスが直接依存しているわけではないのでMockできない、どうすれば?

以下のようなイメージ

class Target(
    private val hoge: Hoge
) {
    
    fun targetFun() {
	val fuga = hoge.getFuga()
	fuga.action() // これをMockしたい
    }
}

class Hoge {
    
    fun getFuga(): Fuga {}
}

class Fuga {}

解決策

直接依存しているHogeに対してmock<Fuga>を返すようにMockしてあげれば良い

class TargetTest {
    
    lateinit val target: Target
    
    @Mock
    val hoge: Hoge
    
    @Test
    fun targetTest() {
        val fuga = mock<Fuga>
        whenever(hoge.getFuga()).thenReturn(fuga)
	whenever(fuga.action()).then~
	val target = Target(hoge)
	
	target.targetFun()
    }
}
このスクラップは2023/08/30にクローズされました