在 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 替换 employeeServiceemployeeService 是用 @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());