java - org.mockito.exceptions.misusing.InvalidUseOfMatchersException:参数匹配器的使用无效!弹簧靴
问题描述
Mockito 真的因为以下错误而杀死。
@Query("SELECT e FROM Employee e WHERE e.status='A' AND LOWER(e.department.useCode)=LOWER(:flag) AND e.department.status='A' ")
Page<Employee> findAllDetails(@Param("flag") String flag, Pageable pageable);
错误:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
2 matchers expected, 1 recorded:
-> at com.xxx.service.EmployeeServiceTest.test_findEmployeesPageable(EmployeeServiceTest.java:146)
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
For more info see javadoc for Matchers class.
at com.xxx.service.EmployeeServiceTest.test_findEmployeesPageable(EmployeeServiceTest.java:146)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
代码:
@Override
public Page<EmployeeDto> findEmployeePageable(Pageable pageableReq, String sortParam, String direction, String useCd) {
Pageable pageable = Utils.sort(pageableReq, sortParam, direction);
Page<Employee> response = null;
if(pageable.getSort().isSorted()) {
response = employeeRepository.findAllDetails(code, pageable);
}else {
response = employeeRepository.findAllDetailsNewDetails(useCd, pageable);
}
List<EmployeeDto> employeeResponse = getResponses(response.getContent());
return new PageImpl<>(employeeResponse, response.getPageable(), response.getTotalElements());
}
测试班
@RunWith(PowerMockRunner.class)
@PrepareForTest({PCUtils.class })
public class EmployeeServiceTest {
@InjectMocks
private EmployeeServiceimpl employeeServiceimpl;
@Mock
private Pageable pageableMock;
@Mock
private Page<Employee> employeePage;
@Mock
private EmployeeRepository employeeRepository;
@Mock
private EmployeeRepository programRepositoryMock;
@Mock
private RoleTypeRepository roleTypeRepository;
@Mock
private RoleType roleTypeMock;
@Mock
private Employee employee;
@Mock
private Optional<Employee> employeeOptional;
@Mock
private Employee programMock;
@Mock
private Optional<Employee> programOptionalMock;
@Mock
private EmployeeDto employeeDto;
@Mock
private Sort sortMock;
@Mock
private Exception ex;
@Mock
private Environment env;
@Test
public void test_findEmployeesPageable() {
when(employeeRepository.findAllByStatusAndRoleTypeActive(anyString(), pageableMock)).thenReturn(employeePage);
when(pageableMock.getPageNumber()).thenReturn(1);
when(pageableMock.getSort()).thenReturn(sortMock);
assertNotNull(employeeServiceimpl.findEmployeePageable(pageableMock, anyString(), anyString(), anyString()));
}
}
解决方案
你的问题是线路
assertNotNull(employeeServiceimpl.findEmployeePageable(pageableMock, anyString(), anyString(), anyString()));
不是anyString()
这样。简而言之,anyString()
当您匹配方法参数时
- 存根方法(告诉 Mockito 在调用方法时如何操作),或
- 验证方法(询问 Mockito 是否调用了该方法)。
但是在这里,您尝试以anyString()
完全不同的方式使用。看起来您正试图让 Mockito 发明参数以传递给您的方法。这不是 Mockito 所做的。
因此,您必须为该方法提供自己的参数。也许像
employeeServiceimpl.findEmployeePageable(pageableMock, "test sort", "test direction", "test use cd");
推荐阅读
- wordpress - wordpress 联系人小部件提供代码来分别获取每个字段
- reactjs - Laravel 身份验证(使用 ReactJs)
- twitter-bootstrap - 如何在 bootstrap vue 中创建五个相等的列?
- html - size 属性不适用于 srcset 中的不同来源
- git - 将代码提交到本地存储库时 lint:eslint 出现错误
- ios - Cocoapods:创建一个包含核心数据的库。但没有得到核心数据实体
- php - 在本地模式下测试 laravel 上传的项目
- c++ - C++ 不同的 minmax 实现
- spring-boot - Spring Boot - org.springframework.cglib.core.ReflectUtils 的非法反射访问 $1
- vba - 区分在 application.inputbox 中输入 0 和按取消