繁体   English   中英

JUnit 中带有 void 方法的 Mockito

[英]Mockito with void method in JUnit

我已经实现了一个简单的 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);
    }

}

服务测试类

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

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

Mockito.doNothing().when(employeeDAO).delete(any());

或者

Mockito.doThrow(new RuntimeException()).when(employeeDAO).delete(any());

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

verify(employeeDAO).delete(any());

谢谢你。

但对我来说,我不得不更换employeeServiceemployeeDAO .The employeeService与注解@Autowired注释和它抛出NotaMockAnnotation例外。

   Mockito.doNothing().when(employeeDAO).delete(employee);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM