Как исправить "проверка должна появиться после того, как весь тестируемый код был выполнен", когда проверка является последней?
Я получаю ошибку "проверка должна появиться после выполнения всего тестируемого кода" со следующим:
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 {}
}
1 ответ
Из приведенного выше кода кажется, что вы пытаетесь использовать JUnit или TestNG. ScalaMock не поддерживает ни одну из этих платформ напрямую, поэтому вы боретесь с проверкой имитаций. Вам нужно реализовать свои тесты, используя либо ScalaTest, либо Specs2. Смотрите http://scalamock.org/user-guide/integration/
Преобразование из JUnit в ScalaTest должно быть довольно простым, если вы переключитесь, например, на FunSuite: http://www.scalatest.org/user_guide/selecting_a_style