次のハンドルメソッドを持つATGにフォームハンドラーがあります-
public boolean handleFindCards(DynamoHttpServletRequest pRequest, DynamoHttpServletResponse pResponse)
throws IOException, ServletException {
Card card = cardService.getCard();
if (card == null) {
if (isLoggingError()) {
logError("Card Service is null");
}
} else {
// Other code
}
return checkFormRedirect(getSuccessURL(), getSuccessURL(), pRequest, pResponse);
}
フォーム ハンドラーは、そのスーパー クラスGenericServiceの 1 つからのログを使用しています。cardService が null かどうかを確認するテストを書きたいと思います。上記のコードでは、カード サービスが null の場合、logError を使用してエラー メッセージを書き込みます。ここで ArgumentCaptor を使用してメッセージを確認できますか。または、このシナリオをテストする他の方法はありますか?
ここで、嘲笑とスパイはどのように連携するのでしょうか? カードオブジェクトを取得するための呼び出しを次のようにスタブする必要があります-
when(cardServiceMock.getCard()).thenReturn(cardMock);
これは私のテスト方法です -
@Test
public void testHandleCardServiceIfCardIsNull() throws IOException, ServletException {
CardService cardServiceMock = mock(CardService.class);
when(cardServiceMock.getCard()).thenReturn(null);
CardOperationsFormHandler testObjSpy = spy(new CardOperationsFormHandler());
testObjSpy.handleFindCards(requestMock, responseMock);
ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
Mockito.verify(testObjSpy).logError(argumentCaptor.capture());
Assert.assertEquals(argumentCaptor.getValue(), "Card Service is null");
}
ありがとう。