以下のコードをテストするために必要なアプローチを決定するのに助けが必要です
と呼ばれる1つのメソッドがあります
private messageDAOInf messageDAO;
public Response verifyUser(Request request) {
Response response = null;
if (someCondition) {
/* -----------Some processing here---------- */
} else {
response = constructResponse(errorCode, errorDesc);
}
// Do more processing with messages from response
response = messageDAOInf
.convertMessagesAsAppropriate(response);
return response;
}
私のEasyMockコードはこちら
/** The message dao inf. */
private MessageDAOInf messageDAOInf;
private VerifyUserService verifyUserServiceI;
@Before
public void setUp() throws Exception {
messageDAOInf = EasyMock.createMock(MessageDAOInf.class);
verifyUserService = new VerifyUserService();
verifyUserService.setMessageDAOInf(messageDAOInf);
}
@Test
public void testErrorResponse() {
Request request = loadRequest();
Response response = constructErrorResponse();
EasyMock.expect(messageDAOInf.convertMessagesAsAppropriate(
response)).andReturn(response);
EasyMock.replay(messageDAOInf);
Response response2 = verifyUserService.verifyUser(request);
assertFailedResponse(response2);
}
問題はラインから
response = constructResponse(errorCode, errorDesc);
verifyUser メソッドでエラー応答を構築し、それをに渡します
messageDAOInf.convertMessagesAsAppropriate()
しかし、簡単なモックでは、他のインスタンス (モックされたインスタンス) を渡すため、エラーで失敗します
java.lang.AssertionError: 予期しないメソッド呼び出し convertMessagesAsAppropriate(***Response@1bb35b***): convertMessagesAsAppropriate(***Response@1b5d2b2***): 予想: 1、実際: 0 org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:29) で org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:56) で
私が取るべきアプローチを教えてください。ありがとうございました。