2

私は次のクラスを持っています:

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 クラスで作成されたインスタンスと一致しないため、予想されます。

しかし、その後、この問題を解決するにはどうすればよいでしょうか。

4

1 に答える 1

3

方法に問題があるよう UserDetailTO.equals(Object)です。UserDetailTOユーザーIDが同じで2番目のパラメータがnullの場合、2つのオブジェクトは等しいですか?

また、あなたの行EasyMock.expectLastCall();は必要ありません。モックが再生モードの場合、すべての void メソッドが自動的に「期待」されます。例外をスローしたり、その void メソッドが呼び出されEasyMock.expectLastCall()たときに を呼び出したりするなど、他の動作を実行する場合にのみ呼び出す必要があります。IAnswer

たとえば、sendEmailメソッドで例外をスローする場合:

Exception expectedException = new Exception(...);
...
handlerMock.sendEmail(aryEq(userDetails));
EasyMock.expectLastCall().andThrow(expectedException);

EasyMock.replay(handlerMock);
于 2013-10-10T17:20:20.920 に答える