У меня есть следующий класс:EasyMock согласовани для массива объектов
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);
}
Когда я запускаю этот тестовый класс, я получаю ошибку Assertion для Неожиданное вызов метода. Ожидается, что в тестовом классе экземпляр UserDetailTO, вставленный в массив, не будет соответствовать экземпляру, созданному в классе Listener.
Но тогда, как решить эту проблему?
равно не является проблемой. Два объекта UserDetailTO равны, если они имеют одинаковый идентификатор пользователя и нулевой 2-й параметр. Но aryEq только сравнивает ссылку объектов внутри массива, а не вызывает UserDetailTO.equals (Object). Разве у нас нет ничего подобного isAnyArray() в EasyMock? – Ayushi
Затем 'infoTO.getUserId()' return "zzzz"? – dkatzel
Моя ошибка ... вы были правы, infoTO.getUserId() не возвращает «zzzz». Благодарю. Но все же я хотел бы знать, есть ли другой вариант ... что-то вроде isAnyArray(). – Ayushi