Java org.mockito.exceptions.misusing.invalidUseofMatchers异常:
我在服务和测试类中的方法:Java org.mockito.exceptions.misusing.invalidUseofMatchers异常:,java,junit,mockito,matcher,Java,Junit,Mockito,Matcher,我在服务和测试类中的方法: public void updateSubModuleOrder(Long[] data, Long moduleSysId, Long userId) { try { for (int i = 0; i < data.length; i++) { SubModule subModule=new SubModule(); int temp = i + 1; user
public void updateSubModuleOrder(Long[] data, Long moduleSysId, Long userId) {
try {
for (int i = 0; i < data.length; i++) {
SubModule subModule=new SubModule();
int temp = i + 1;
userSubmodule.setDsplySeq(temp);
userSubModuleDao.saveOrUpdate(userSubmodule);
@Test
public void testupdateSubModuleOrder(){
UserModuleServiceImpl userModuleServiceImpl = new UserModuleServiceImpl();
UserSubModuleDao userSubModuleDao = mock(User//set the required param ,some code here//
UserSubModuleId userSubModuleId=new UserSubModuleId();
//some code//
when(userSubModuleDao.findById((any(UserSubModuleId.class)),false)).thenReturn(userSubModule);
when(userSubModuleDao.saveOrUpdate(any(UserSubModule.class))).thenReturn(null);
userModuleServiceImpl.updateSubModuleOrder(data, moduleSysId, userId);
};*
如果匹配器与原始值组合,则可能发生此异常:
//incorrect:
someMethod(anyObject(), "raw String");
使用匹配器时,所有参数都必须由匹配器提供。
例如:
//correct:
someMethod(anyObject(), eq("String by matcher"));
方法
findbyID
是我的dao扩展的baseDao方法。这不是最终的或静态的,但我还是遇到了这个问题。您要么不指定匹配器,要么所有参数都需要匹配。因此:
when(userSubModuleDao.findById((any(UserSubModuleId.class)),false))
应该是:
when(userSubModuleDao.findById(any(UserSubModuleId.class), eq(false)))
(我已经从任何调用中删除了多余的括号。)
从:
警告:
如果使用参数匹配器,所有参数必须由匹配器提供
确保所有参数都在使用匹配器(anyXX
或eq
):userSubModuleDao.findById((any(UserSubModuleId.class)),false)
看起来可疑可能与我尝试使用doRetrun()时重复。When(),它给出以下错误。TestUserModuleServiceImpl.testupdateSubModuleOrder(TestUserModuleServiceImpl.java:270)例如,可能缺少thenReturn()。正确的存根示例:when(mock.isOk()).thenReturn(true);when(mock.isOk()).thenthow(异常);doThrow(异常).when(模拟).someVoidMethod();提示:1。缺少返回()2。你正在尝试一个最终的方法,你这个淘气的开发者!无论如何,我已经恢复到最初的行和它的工作现在。最新的Matchers文件。(Mockito 1.x)我的情况是由于方法访问级别为包级别
,将方法更改为受保护
修复了我的问题。
when(userSubModuleDao.findById(any(UserSubModuleId.class), eq(false)))