【问题标题】:Problem with Type safety in Mockito - mocked collectionMockito 中的类型安全问题 - 模拟集合
【发布时间】:2020-03-19 23:05:19
【问题描述】:

我尝试使用 Mockito 沿 jUnit5 模拟 List-Collection。

我尝试模拟以下集合:

@Test public void testMock() { List<Integer> listMock = mock(List.class); }

我在 Eclipse 中收到警告: "类型安全:List 类型的表达式需要未经检查的转换才能符合 List"。

我尝试修复它,但我不确定使用软件框架进行模拟是否存在结构性问题?当我模拟集合时,有没有办法完全解决这个警告,或者我必须接受未经检查的转换?

感谢您提供任何线索。

【问题讨论】:

  • You.shouldn not mock a List just make a test list with the data you want

标签: java eclipse mockito junit5


【解决方案1】:

您可以通过使用 Mockito 的 @Mock 注释来解决模拟参数化类型的问题,例如像这样:

class MyTests {

    @Mock
    List<String> listOfStrings;

    @BeforeEach
    void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testMock() {
        listOfStrings.add("a String");
    }
}

也就是说,模拟 List 通常没有多大意义,但我猜你选择这个只是作为任何参数化类型的示例。

如果您使用的是 Mockito 的 Jupiter Extension,您甚至可以摆脱 initMocks() 方法:

@ExtendWith(MockitoExtension.class)
class MyTests {

    @Mock
    List<String> listOfStrings;

    @Test
    public void testMock() {
        listOfStrings.add("a String");
    }
}

不过,这将需要一个额外的依赖项:“org.mockito:mockito-junit-jupiter:3.2.4”(或您使用的任何版本)。

【讨论】:

  • 谢谢,问题解决了。我试图按照您的建议摆脱 initMocks() 方法。您对任何解决方法有什么建议吗?
  • 我用 MockitoExtension 添加了版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多