Я пытаюсь использовать PowerMock, чтобы прервать вызов Jackson ObjectMapper, но по какой-то причине он не работает, и я подозреваю, что это связано с тем, что на самом деле, когда NotNew не предоставляет проверенный экземпляр, когда он создается в тестируемом методе.
Это устаревшая кодовая база, которую мы не можем реально изменить, поэтому мы застряли с использованием PowerMock для удовлетворения требований покрытия тестами ...
У меня есть метод, который имеет что-то вроде следующего:
private void intakeDataFromUrl(URL url) {
ObjectMapper mapper = new ObjectMapper();
DataDTO[] dataDtos = mapper.readValue(url, DataDTO[].class)
// other code
}
В модульном тесте я пытаюсь сделать следующее:
@Test
public void test_intakeDataFromUrl() {
DataDTO[] data = this.createMockData();
ObjectMapper mapper = mock(ObjectMapper.clas);
whenNew(ObjectMapper.clas)
.withNoArguments()
.thenReturn(mapper);
// mock call to return mocked data
doReturn(data)
.when(mapper, "readValue", any(URL.class), any(DataDTO[].class))
}
Но в тестируемом коде dataDtos всегда равен нулю, а затем следующий раздел кода всегда терпит неудачу.
Редактировать:
Похоже, проблема в этой строке, хотя, глядя на другие примеры, она должна работать.
// mock call to return mocked data
doReturn(data)
.when(mapper, "readValue", any(URL.class), any(DataDTO[].class))
Я также пробовал isA и eq напоследний аргумент без удачи, все еще возвращает ноль.