这是一个非常新手的问题,但我不知道如何存根。
我必须模拟一个像这样返回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>)
答案 0 :(得分: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());
答案 1 :(得分: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
并不理想,但这应该适用于您的场景。
答案 2 :(得分:0)
尝试输入方法:
public <T extends SomeClass> Class<T> getAClass();
when(this.someInstance.getAClass())
.thenReturn(SomeClassThatExtendsSomeClass.class);