我如何使用thenReturn for Class?

时间:2012-11-12 10:43:14

标签: java mockito stub

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

我必须模拟一个像这样返回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>)

3 个答案:

答案 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);
相关问题