Не в состоянии смоделировать метод getTimestamp на ложной строке - PullRequest
0 голосов
/ 24 августа 2018

Я пишу приложение, которое взаимодействует с Кассандрой, используя Scala. Выполняя модульное тестирование, я использую mockito, в котором я высмеиваю resultSet и row

  val mockedResultSet = mock[ResultSet]
  val mockedRow = mock[Row]

Теперь, пока высмеиваем методы mockedRow, такие как

  doReturn("mocked").when(mockedRow).getString("ColumnName")

отлично работает. Однако я не могу смоделировать метод getTimestamp объекта mockedRow. Я пробовал 2 подхода, но не увенчался успехом.

Первый подход

  val testDate = "2018-08-23 15:51:12+0530"
  val formatter = new SimpleDateFormat("yyyy-mm-dd HH:mm:ssZ")
  val date: Date = formatter.parse(testDate)
  doReturn(date).when(mockedRow).getTimestamp("ColumnName")

и второй подход

when(mockedRow.getTimestamp("column")).thenReturn(Timestamp.valueOf("2018-08-23 15:51:12+0530"))

Они оба возвращают ноль, т. Е. Он не возвращает фиктивное значение метода getTimestamp. Я использую в своем проекте зависимость ядра 3.0 от cassandra. Любая помощь будет высоко ценится. Заранее спасибо !!!

1 Ответ

0 голосов
/ 27 августа 2018

Насмешливые объекты, которыми вы не владеете, обычно считаются плохой практикой, в которой говорится, что вы можете попытаться увидеть, что происходит, чтобы проверить взаимодействие с имитатором, то есть

verify(mockedRow).getTimestamp("column")

Учитывая, что вы получаете пустое значение из макета, этот оператор должен завершиться ошибкой, но в случае сбоя будут показаны все фактические вызовы, полученные имитатором (и его параметры), что должно помочь вам в отладке.

Способсвести к минимуму проблемы такого рода можно с помощью сеанса mockito , в стандартном mockito они могут использоваться только через бегун JUnit, но с mockito-scala вы можете использовать их вручную, например так

MockitoScalaSession().run {
   val mockedRow = mock[Row]
   when(mockedRow.getTimestamp("column")).thenReturn(Timestamp.valueOf("2018-08-23 15:51:12+0530"))
   //Execute your test
}

Этот код проверит, что макет не вызывается с чем-то, для чего не было заглушки, он также сообщит вам, если вы предоставили заглушки, которые фактически не использовались, и еще несколько вещей..

Если вам нравится такое поведение (и вы используете ScalaTest), вы можете автоматически применять его к каждому тесту, используя MockitoFixture

Я разработчик mockito-scala между прочим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...