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

新手上路,请多包涵

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

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

假设 getValue() 返回泛型类型 T 。但是当我后来将它传递给一个期望 Foo<Bar> 的方法时,那将会有小猫。铸造是这样做的唯一方法吗?

原文由 Tim Clemons 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

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

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

原文由 John Paulett 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

这是一个例子:

 @RunWith(MockitoJUnitRunner.class)
public class FooTests {

    @Mock
    public Foo<Bar> fooMock;

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

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

原文由 Marek Kirejczyk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题