2

これは本当に初心者の質問ですが、これをスタブする方法がわかりません。

このように Class を返すメソッドをモックする必要があります。

public Class<? extends SomeClass> getAClass();

私がこのようなことをしたら

when(this.someInstance.getAClass())
    .thenReturn(SomeClassThatExtendsSomeClass.class);

コンパイルエラーが発生します。

The method thenReturn(Class<capture#1-of ? extends SomeClass>) in the type OngoingStubbing<Class<capture#1-of ? extends SomeClass>> is not applicable for the arguments (Class<SomeClassThatExtendsSomeClass>)
4

3 に答える 3

5

メソッド宣言を@Bohemianが上で提案したものに変更できる場合、

public <T extends SomeClass> Class<T> getAClass();

次に、次のようにモックステートメントを記述できます。

when(this.someInstance.<SomeClassThatExtendsSomeClass>getAClass())
     .thenReturn(SomeClassThatExtendsSomeClass.class);

それ以外の場合は、doReturn セマンティクスを次のように使用する必要があります。

Mockito
    .doReturn(SomeClassThatExtendsSomeClass.class)
    .when(this.someInstance.<SomeClassThatExtendsSomeClass>getAClass());
于 2012-11-12T11:48:18.057 に答える
2

動作するようにメソッド宣言を変更できない場合はthenReturn、次を使用できますthenAnswer

when(this.someInstance.getAClass()).thenAnswer(new Answer<Class<? extends SomeClass>>() {
            @Override
            public Class<? extends SomeClass> answer(InvocationOnMock invocation) throws Throwable {
                return SomeClassThatExtendsSomeClass.class;
            }
});

Answer固定値を返すためだけに実装を行うことは理想的ではありませんが、これはシナリオで機能するはずです。

于 2012-11-12T12:14:57.550 に答える
0

メソッドを入力してみてください:

public <T extends SomeClass> Class<T> getAClass();

when(this.someInstance.getAClass())
    .thenReturn(SomeClassThatExtendsSomeClass.class);
于 2012-11-12T11:30:41.570 に答える