我在尝试对函数调用进行单元测试时遇到问题。messageProducer.sendMessage()即使已存根,调用也会因 void 方法调用而失败。
请在下面找到我的代码的简化快照。我正在使用 doAnswer() 存根来模拟 void 方法(基于 StackOverflow 上的早期答案)。
我什至尝试了其他选项doThrow()和doNothing()存根,但在调用存根方法时它们也会因相同的 NPE 而失败 :(。
感谢有人可以提出解决方案/解决方法。非常感谢。
测试类
// Test class
@RunWith(MockitoJUnitRunner.class)
public class RetriggerRequestTest {
@Mock
private MessageProducer messageProducer;
@InjectMocks
private MigrationRequestServiceImpl migrationRequestService;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void sendRetriggerRequest() throws Exception {
// Below two stubbings also not Work, NPE encountered!
//doNothing().when(messageProducer).sendMessage(any(), anyLong());
//doThrow(new Exception()).doNothing().when(messageProducer).sendMessage(any(), anyLong());
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
}
}).when(messageProducer).sendMessage(any(EMSEvent.class), anyLong());
try {
// Gets Null pointer exception
migrationRequestService.retriggerRequest(emsRetriggerRequest);
}
catch (Exception ex) {
fail(ex.getMessage());
}
}
梦里花落0921
胡子哥哥
相关分类