2

这是一个非常新手的问题,但我不知道如何解决这个问题。

我必须模拟一个方法来返回这样的类。

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 回答