1. ホーム
  2. java

[解決済み] 同じメソッドを同じ引数で複数回呼び出した状態でMockitoを使用する

2022-02-19 06:54:12

質問

スタブ化されたメソッドが、その後の呼び出しで異なるオブジェクトを返すようにする方法はありますか?からの不定な応答をテストするために、これを行いたいと思います。 ExecutorCompletionService つまり、メソッドの戻り値の順序に関係なく、結果が一定であることをテストすることです。

私がテストしたいコードは、次のようなものです。

// Create an completion service so we can group these tasks together
ExecutorCompletionService<T> completionService =
        new ExecutorCompletionService<T>(service);

// Add all these tasks to the completion service
for (Callable<T> t : ts)
    completionService.submit(request);

// As an when each call finished, add it to the response set.
for (int i = 0; i < calls.size(); i ++) {
    try {
        T t = completionService.take().get();
        // do some stuff that I want to test
    } catch (...) { }        
}

解決方法は?

を使って行うことができます。 thenAnswer メソッドを使用します。 when ):

when(someMock.someMethod()).thenAnswer(new Answer() {
    private int count = 0;

    public Object answer(InvocationOnMock invocation) {
        if (count++ == 1)
            return 1;

        return 2;
    }
});

または、同等の、静的な doAnswer メソッドを使用します。

doAnswer(new Answer() {
    private int count = 0;

    public Object answer(InvocationOnMock invocation) {
        if (count++ == 1)
            return 1;

        return 2;
    }
}).when(someMock).someMethod();