1

次のハンドルメソッドを持つ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");
    }

ありがとう。

4

2 に答える 2

4

David Wallace が言ったように、 を使用する必要がありますMockito.spy(T object)

したがって、簡単な方法で:

public void runArgumentCaptor() {
    logError("This is an error");
}

テストは次のようになります。

    @Spy @InjectMocks private SomeClassName testObj;

    @Test(groups = { "unit" })
    public void runArgumentCaptorTest() throws Exception {

        testObj.runArgumentCaptor();

        ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
        Mockito.verify(testObj).logError(argumentCaptor.capture());
        Assert.assertEquals(argumentCaptor.getValue(), "This is an error");
    }

[編集] の宣言を追加しましたtestObj。追加に注意してください@Spy。また、テスト方法を更新しました。

于 2013-08-12T11:25:05.803 に答える