JUnit 中带有 void 方法的 Mockito

Naf*_*ema 7 java junit mockito spring-boot junit5

我已经实现了一个简单的 Spring Boot CRUD 应用程序来编写测试用例。我在删除操作时遇到了一些麻烦。当我使用Mockito.when方法时,它需要一个返回值,而我的删除方法是非返回类型。

服务等级

@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);
    }

}
Run Code Online (Sandbox Code Playgroud)

服务测试类

@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;
    }

}
Run Code Online (Sandbox Code Playgroud)

Ahm*_*ady 16

您可以在模拟上使用 doNothing 或 doThrow 来模拟模拟的行为。

Mockito.doNothing().when(employeeDAO).delete(any());
Run Code Online (Sandbox Code Playgroud)

或者

Mockito.doThrow(new RuntimeException()).when(employeeDAO).delete(any());
Run Code Online (Sandbox Code Playgroud)

然而,实际上并不需要 doNothing,因为这将是具有 void 返回类型的模拟函数的默认行为。然而,您可能希望verify调用此方法。例如:

verify(employeeDAO).delete(any());
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用Mockito.doNothing()

Mockito.doNothing().when(employeeDAO).deleteEmployee(Mockito.any());
Run Code Online (Sandbox Code Playgroud)