Прежде всего, я не вижу ничего насмешливого над rs.getDate (), так что он будет возвращать ноль.Это, вероятно, вызовет проблемы как с поддельными, так и с реальными экземплярами SimpleDateFormat
.Вы можете адресовать это следующим образом:
// (I am using the deprecated constructor for simplicity)
java.sql.Date startDate = new java.sql.Date(2018, 6, 5);
Mockito.when(mockResultSet.getDate("startDate")).thenReturn(startDate);
Это вместе when(formatter.format(any())).thenReturn("'2018-11-12 00:00'")
может преодолеть исключение.Похоже, однако, что вы создаете настоящий SimpleDateFormat
внутри AdminDaoImpl
, а ваш поддельный не привыкнет вообще.Поэтому вам придется либо изменить AdminDaoImpl
, чтобы позволить вам вводить SimpleDateFormat
, либо написать свои тесты, чтобы они не знали, что AdminDaoImpl
использует SimpleDateFormat
.
Лично я бы не стализдеваться над SimpleDateFormat на всех.Вместо этого я бы рассматривал это как внутреннюю деталь реализации AdminDaoImpl
.Я бы посмеялся над набором результатов, чтобы вернуть дату, а затем проверил, что ElectionListResponse
имеет ожидаемую дату.Это выглядело бы примерно так:
// (I am using the deprecated constructor for simplicity)
java.sql.Date startDate = new java.sql.Date(2018, 6, 5);
Mockito.when(mockResultSet.getDate("startDate")).thenReturn(startDate);
ElectionListResponse response = adminDao.getElections('>' );
Election firstElection = response.getFirst() // Or whatever method(s) get you the first one
Assert.assertEquals("2018-06-05 00:00", firstElection.getStartDate());
Эти тесты подтверждают, что Election
правильно сопоставил startDate
из набора результатов, но им совершенно все равно, как AdminDaoImpl
делает это,