Использование Mockito argThat в цикле приводит к исключению NullPointerExceptionJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Использование Mockito argThat в цикле приводит к исключению NullPointerException

Сообщение Anonymous »

Один из устаревших тестов использует Mockito argThat для заглушки соответствующих результатов в цикле.
Он пройден, если я уменьшу количество итераций до 1 (

Код: Выделить всё

numberOfItems = 1
, т.е. как будто цикла нет).
Как только он доходит до 2-й итерации, выдается ошибка с NPE:

Код: Выделить всё

java.lang.NullPointerException: Cannot invoke "getValue()" because "arg" is null
Код такой:

Код: Выделить всё

 @Test
public void testMy() {
int numberOfItems = 2;
List myDataList = getTestData(numberOfItems);

for (MyData md : myDataList) {
when(mockedService.someMethod(
argThat(arg -> Objects.equals(arg.getValue(), md.getMyValue())))) // NPE here on arg.getValue()
.thenReturn(getExpectedResult(md.getMyValue()));
}

List resData = testService.methodUnderTest(myDataList);

// assert... resData list has all the expected items and values
}
Тестируемый метод аналогичен следующему

Код: Выделить всё

public List methodUnderTest(List myDataList) {
myDataList.forEach(myData -> {
// ... some logic ...

myData.setResult(mockedService.someMethod(new MyRequest(myData.getMyValue())));
}
});

return myDataList;
}
Но в случае ошибки вызов метода даже не достигается, потому что NPE происходит раньше в коде модульного теста.
Изначально он проходил мимо используется примерно так

Код: Выделить всё

when(mockedService.someMethod(
argThat(hasProperty("value", equalTo(md.getMyValue())))))
.thenReturn(getExpectedResult(md.getMyValue()));
Однако я увидел рекомендацию предпочесть сравнение объектов напрямую, поэтому я попытался переписать заглушку, как было предложено, избавившись от этих равных и hasProperty, бот теперь получил эту ошибку NPE :)
Посоветуйте, пожалуйста, что я делаю не так? Спасибо!!

Подробнее здесь: https://stackoverflow.com/questions/777 ... rexception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»