该类型中的方法不适用于升级为Java 1.8的Varargs方法的参数



我正在我的项目中使用mocikto Framework(版本1.9.5 ),用于使用Java 1.7进行单元测试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);

此代码可以与 java 1.7 一起使用,现在我将java版本升级到我的pom.xml中的1.8时,我会得到以下错误的错误...

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

有人可以帮助我解决此错误吗?谢谢

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

Mockito.any(MyMapper.class)

to

Mockity.any()

例如。(假设您正在使用Mockito本身的最新版本)

然后您可以找到... anyVarArg()被弃用,并为此使用 any()

我认为java 8是更多的类型效果,因为您想拥有一个MyMapper<T>,但您仅使用MyMapper访问它。

解决方案可能是使用

Mockito.<MyMapper<ConcreteType>>any()

最新更新