ПРИМЕЧАНИЕ. Я отметил 3 LINE
числа, которые я обсуждаю в своем вопросе. Возможно, вам потребуется прокрутить вправо в фрагментах кода, чтобы увидеть.
Я действительно изо всех сил пытаюсь выполнить модульноеметод с цепочкой Optional.map()
s.
@Override
public void accept(Object message)
{
extractSenderReference(message.toString())
.map(t ->
{
t.setTransactionStatus("TAG1"); // <- LINE #1
return t;
})
.map(StaticConverter::convert) //< -LINE #2
.ifPresent(Persist::persist);
}
Где extractSenderReference()
возвращает Optional
типа Obj
и является закрытым методом.
И мой тест:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassBeingTested.class, StaticConverter.class})
public class MyTest {
private ClassBeingTested updateProcessor = PowerMockito.spy(new ClassBeingTested());
private StatusDataObj statusDataObj = mock(StatusDataObj.class);
@Test
public void testSomething() throws Exception{
Obj myObj = getObj();
PowerMockito.mockStatic(StaticConverter.class);
PowerMockito.doReturn(Optional.ofNullable(myObj)).when(updateProcessor, "extractSenderReference", anyString()); // <- LINE #3
when(StaticConverter.convert(myObj)).thenReturn(statusDataObj);
updateProcessor.accept("MESSAGE1");
}
private Obj getObj(){
Obj obj = new Obj();
obj.setId(100L);
return obj;
}
}
В LINE #1
, как отмечено в моем методе accept()
, объект t
был обработан, и его transactionStatus
был успешно установлен.Однако в LINE #2
я получаю NPE при выполнении вышеуказанного теста.
Я также пробовал PowerMockito.spy(StaticConverter.class);
вместо PowerMockito.mockStatic(StaticConverter.class);
согласно https://github.com/powermock/powermock/wiki/Mockito#mocking-static-method, но я получаю то же самоеNPE.
Я думал, что карта конвертирует t
в StatusDataObj
тип.Поэтому, когда карта вызывает convert
, я заглушу и верну свой тип.Однако изначально я ожидал, что LINE #3
эффективно позаботится о цепочечных вызовах map
для Optional
, возвращаемых из extractSenderReference()
, поскольку я использую реальный объект с установленными значениями, но должен быть нулевойзначение где-то еще?