Type中的方法不适用于varargs方法升级到Java 1.8的参数

时间:2017-03-02 12:35:22

标签: java java-8 mockito

我正在使用Mocikto框架(版本1.9.5 )在我的项目中使用Java 1.7进行单元测试现在我正在迁移我的项目以构建并运行 Java 1.8

在我的一个单元测试中,我试图模仿以下方法

public <T> List<T> myMethod(final String sql, final MyMapper<T> MyMapper, final Argument... args) 

使用此代码

String learningId = "testLeaId";
String catalogId = "testCatId";
List<String> returnList = new ArrayList<String>();
returnList.add(catalogId);
when(myService.myMethod(Mockito.anyString(), Mockito.any(MyMapper.class), (Argument[]) Mockito.anyVararg())).thenReturn(returnList);

当我在我的pom.xml中将我的Java版本升级到1.8时,此代码可以正常使用 Java 1.7 我收到以下错误...

[ERROR] The method myMethod(String, MyMapper<T>, Argument...) in the type MyService is not applicable for the arguments (String, MyMapper, Argument)
        C:\somepath\MyDaoTest.java:59

任何人都可以帮我解决这个错误吗?谢谢

2 个答案:

答案 0 :(得分:1)

使用Java 8,类型推断已得到改进,因此您应该能够更改

Mockito.any(MyMapper.class)

Mockity.any()
例如,

。 (假设您使用的是最近版本的Mockito本身)

然后你可以找到anyVarArg() deprecated,并使用any()也是如此!

答案 1 :(得分:0)

我认为Java 8有点类型保存,因为您希望拥有MyMapper<T>,但仅使用MyMapper访问它。

解决方案可能是使用

Mockito.<MyMapper<ConcreteType>>any()