0

Mockito で単体テストを書いているとき、インジェクトされたモックの 1 つでゲッターを呼び出し、返されたオブジェクトからメソッドを呼び出すことがよくあります。

これまでのところ、私は次のようなことをしました:

    @Mock
    private Randomizer r;
    @Mock
    private Random random;
    @InjectMocks
    private NodeGenerator ng = new NodeGenerator();

    @Test
    public void nodeIsDuplicate() {

        when(r.getRandom()).thenReturn(random);
        when(random.nextInt(2)).thenReturn(1);
        [...]
    }

しかし、ランダムをモックアウトして、いつでも秒を設定しなければならないのは、とてももったいないようです。when ステートメントを次のようにする方法はありますか。

when(r.getRandom().nextInt(2)).thenReturn(1);

ランダムをモックアウトする必要がないので、Randomizer モックだけですべてを 1 行で実行できますか?

4

1 に答える 1

4

Mockito のOne liner stubs が必要です。

編集:

よく調べてみると、探しているものと正確に一致しない場合がありますが、定型コードの一部を減らすことができます。

あなたが探しているのは、実際、コメントが示唆するように、deep stubsです。

あなたの例では、次のようになります。

Randomizer randomizer = mock(Randomizer.class, RETURNS_DEEP_STUBS);

when(randomizer.getRandom().nextInt(2)).thenReturn(1);
于 2013-02-03T21:21:32.380 に答える