使用 Mockito 模拟具有泛型参数的类

2022-08-31 04:48:23

有没有一种用泛型参数模拟类的干净方法?假设我必须模拟一个类,我需要将其传递到一个期望.我可以很容易地做到以下几点:Foo<T>Foo<Bar>

Foo mockFoo = mock(Foo.class);
when(mockFoo.getValue).thenReturn(new Bar());

假设返回泛型类型 。但是,当我稍后将其转换为期望的方法时,这将有小猫。选角是做到这一点的唯一手段吗?getValue()TFoo<Bar>


答案 1

我认为你确实需要投射它,但它不应该太糟糕:

Foo<Bar> mockFoo = (Foo<Bar>) mock(Foo.class);
when(mockFoo.getValue()).thenReturn(new Bar());

答案 2

解决此问题的另一种方法是改用注释。并非在所有情况下都有效,但看起来:)@Mock

下面是一个示例:

@RunWith(MockitoJUnitRunner.class)
public class FooTests {

    @Mock
    public Foo<Bar> fooMock;
    
    @Test
    public void testFoo() {
        when(fooMock.getValue()).thenReturn(new Bar());
    }
}

MockitoJUnitRunner初始化用@Mock注释的字段。


推荐