我正在我的项目中使用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()