Как исправить "проверка должна появиться после того, как весь тестируемый код был выполнен", когда проверка является последней?

Я получаю ошибку "проверка должна появиться после выполнения всего тестируемого кода" со следующим:

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

Другие вопросы по тегам