当我只想测试一个方法在其他方法中被调用时,我怎么做呢?我不希望在调用该方法之后运行它。
fun aMethod(){
bMethod()
}
fun bMethod(){
// complex
}我试过这个。但没起作用。
@Test
fun test(){
coEvery{ mClass.bMethod() } just runs
mClass.aMethod()
verify { mClass.bMethod() wasNot Called }
}@Test
fun test(){
coEvery{ mClass.bMethod() } returns Unit
mClass.aMethod()
verify { mClass.bMethod() wasNot Called }
}@Test
fun test(){
coEvery{ mClass.bMethod() } answers { Unit }
mClass.aMethod()
verify { mClass.bMethod() wasNot Called }
}我也尝试用called代替Called(小写和大写C)。
他们都不起作用。我该如何解决这个问题?
发布于 2022-08-11 10:59:27
在你的问题中有很多问题或事情是不清楚的:
coEvery来存根bMethod,因为它不是一个挂起函数。您可以通过以下事实看到这一点:在suspend声明的开头没有bMethod关键字。您可以而且应该使用常规的instead.verify { xy wasNot Called }来验证没有调用模拟xy的任何函数。如果要验证单个函数bMethod没有被调用,则应该检查它是否被调用0次:verify(exactly = 0) { mClass.bMethod() } bMethod,而不是aMethod --这让我假设mClass不是模拟的,而是间谍,并且您打算在调用mClass.aMethod时调用aMethod的实际实现。由于bMethod是在aMethod中调用的,所以您对bMethod未被调用的验证总是失败的,因为它实际上是被调用的。verify不关心是否调用了真正的实现或模拟的实现。因此,为了获得成功的验证,您应该将测试更改为模拟aMethod,这样它就不会真正调用bMethod,或者应该验证调用bMethod一次(或至少一次)。https://stackoverflow.com/questions/73203208
复制相似问题