在 JUnit 中使用 void 方法的 Mockito
Mockito with void method in JUnit
我已经实现了一个简单的 spring boot crud 应用程序来编写测试用例。我在删除操作时遇到了一些麻烦。当我使用 Mockito.when
方法时,它应该是一个 return 值,而我的删除方法是非 return 类型。
服务Class
@Service
public class EmployeeServiceImpl implements EmployeeService {
private EmployeeDAO employeeDAO;
@Autowired
public EmployeeServiceImpl(EmployeeDAO employeeDAO)
{
this.employeeDAO=employeeDAO;
}
@Override
public void deleteEmployee(Employee emp) throws IllegalArgumentException{
employeeDAO.delete(emp);
}
}
服务测试class
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class EmployeeServiceImplTest {
@MockBean
private EmployeeDAO employeeDAO;
@Autowired
private EmployeeService employeeService;
@Test
public void testDeleteEmployee()
{
int empId=1054;
Employee employee=employee_2();
employee.setEmpId(empId);
// how to write test case for void method
}
private Employee employee_2()
{
Employee employee=new Employee();
employee.setEmpName("NafazBenzema");
employee.setSalary(12000.00);
return employee;
}
}
您可以使用 Mockito.doNoting()
:
Mockito.doNothing().when(employeeDAO).deleteEmployee(any());
谢谢你。
但在我的例子中,我不得不用 employeeDAO
替换 employeeService
。employeeService
是用 @Autowired
注释注释的,它会抛出 NotaMockAnnotation
异常.
Mockito.doNothing().when(employeeDAO).delete(employee);
您可以在 mock 上使用 doNothing 或 doThrow 来模拟 mock 的行为。
Mockito.doNothing().when(employeeDAO).delete(any());
或
Mockito.doThrow(new RuntimeException()).when(employeeDAO).delete(any());
但是,实际上并不需要 doNothing,因为这是具有 void return 类型的模拟函数的默认行为。
但是,您可能希望 verify
调用此方法。例如:
verify(employeeDAO).delete(any());
我已经实现了一个简单的 spring boot crud 应用程序来编写测试用例。我在删除操作时遇到了一些麻烦。当我使用 Mockito.when
方法时,它应该是一个 return 值,而我的删除方法是非 return 类型。
服务Class
@Service
public class EmployeeServiceImpl implements EmployeeService {
private EmployeeDAO employeeDAO;
@Autowired
public EmployeeServiceImpl(EmployeeDAO employeeDAO)
{
this.employeeDAO=employeeDAO;
}
@Override
public void deleteEmployee(Employee emp) throws IllegalArgumentException{
employeeDAO.delete(emp);
}
}
服务测试class
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class EmployeeServiceImplTest {
@MockBean
private EmployeeDAO employeeDAO;
@Autowired
private EmployeeService employeeService;
@Test
public void testDeleteEmployee()
{
int empId=1054;
Employee employee=employee_2();
employee.setEmpId(empId);
// how to write test case for void method
}
private Employee employee_2()
{
Employee employee=new Employee();
employee.setEmpName("NafazBenzema");
employee.setSalary(12000.00);
return employee;
}
}
您可以使用 Mockito.doNoting()
:
Mockito.doNothing().when(employeeDAO).deleteEmployee(any());
谢谢你。
但在我的例子中,我不得不用 employeeDAO
替换 employeeService
。employeeService
是用 @Autowired
注释注释的,它会抛出 NotaMockAnnotation
异常.
Mockito.doNothing().when(employeeDAO).delete(employee);
您可以在 mock 上使用 doNothing 或 doThrow 来模拟 mock 的行为。
Mockito.doNothing().when(employeeDAO).delete(any());
或
Mockito.doThrow(new RuntimeException()).when(employeeDAO).delete(any());
但是,实际上并不需要 doNothing,因为这是具有 void return 类型的模拟函数的默认行为。
但是,您可能希望 verify
调用此方法。例如:
verify(employeeDAO).delete(any());