我收到错误“验证应该在所有被测代码都被执行后出现”,如下所示:
class CowTest extends MockFactory {
Cow.init(testCowProcesses)
@Test
def noProcessesTest: Unit = {
val cow: Cow = Cow(testCowProcesses)
cow.simulateOneDay(0 nanoseconds)
}
@Test
def processSimulationTest: Unit = {
val NUMBER_OF_TRIES: Int = 10
val cow: Cow = Cow(testCowProcesses)
for (ii <- 0 until NUMBER_OF_TRIES) {
cow.simulateOneDay(0 nanoseconds)
}
(cow.metabolicProcess.simulateOneDay _).verify(0 nanoseconds).repeated(NUMBER_OF_TRIES)
}
}
testCowProcesses
在另一个文件中定义,如下所示(缩写):
object CowTesters extends MockFactory {
val metProc = stub[MetabolicProcess]
(metProc.replicate _).when().returns(metProc)
val testCowProcesses = CowProcesses(metProc)
}
我不太明白错误信息。如果我注释掉这一verify
行,测试就会运行。或者,如果我注释掉第一个测试,则可以运行第二个测试。测试类中没有其他测试。这似乎表明存根对象不能被重用,因为它们在 mockito 中(我正在改编来自 mockito 的代码)。
重新实例化模拟对象的最佳解决方案是,也许通过转换CowTesters
为class
?
编辑:
我确认了上述建议有效(不确定它是否是最好的),但同时我做了一些更复杂的事情来让我通过编译:
//TODO: once all tests are converted to ScalaMock,
//TODO: just make this a class with a companion object
trait CowTesters extends MockFactory {
val metProc = stub[MetabolicProcess]
(metProc.replicate _).when().returns(metProc)
val testCowProcesses = CowProcesses(metProc)
}
object CowTesters extends CowTesters {
def apply(): CowTesters = new CowTesters {}
}