我有以下类(class):
public class Listener{
@Autowired
private Handler handler;
public void receiveMessage(Message<String> message) {
String xmlMessage = message.getPayload().toString();
XStream xstream = new XStream();
xstream.processAnnotations(InfoTO.class);
infoTO = (InfoTO) xstream.fromXML(xmlMessage);
UserDetailTO[] userDetailTO = { new UserDetailTO(infoTO.getUserId(), null) };
handler.sendEmail(userDetailTO);
}
}
我的测试方法:
@Test
public void testRecieve() {
UserDetailTO[] userDetails={new UserDetailTO("zzzz",null)};
Handler handlerMock=EasyMock.createMock(Handler.class);
handlerMock.sendEmail(aryEq(userDetails));
EasyMock.expectLastCall();
EasyMock.replay(handlerMock);
ReflectionTestUtils.setField(listener, "handler", handlerMock);
String message = "Test Payload";
Message<String> finalMessage = MessageBuilder.withPayload(message).build();
listener.receiveMessage(finalMessage);
}
当我运行这个测试类时,我收到意外方法调用的断言错误。这是预期的,因为在测试类中,插入数组中的 UserDetailTO 实例将与 Listener 类中创建的实例不匹配。
那么,如何解决这个问题呢?
最佳答案
看起来像 UserDetailTO.equals(Object)
有问题方法。是 2 UserDetailTO
如果对象具有相同的用户 ID 且第二个参数为 null,则它们相等?
还有你的线路EasyMock.expectLastCall();
不需要。当模拟处于重播模式时,所有 void 方法都会自动“预期”。您只需调用 EasyMock.expectLastCall()
如果您想执行一些其他行为,例如引发异常或调用 IAnswer
当调用 void 方法时。
例如,如果您想要 sendEmail
抛出异常的方法:
Exception expectedException = new Exception(...);
...
handlerMock.sendEmail(aryEq(userDetails));
EasyMock.expectLastCall().andThrow(expectedException);
EasyMock.replay(handlerMock);
关于java - 对象数组的 Easymock 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296542/