在相同的方法中进行不同条件下的单元测试



在单元测试中,当一个方法中存在多个条件时,我想知道是否应该测试该方法的相同部分。我的意思是,例如,在以下方法中有2个条件(代码被简化,不必要的部分被省略(:

private Boolean demo() {

Boolean result = null;
List<Employee> employees = employeeRepository.findAll();

if (/* condition 1 */) {            
result = true;
} else { /* condition 2 */                       
result = false;
}

employeeRepository.saveSalary(BigDecimal salary);
employeeRepository.saveEmployee(Employee employee);

return result;
}

当我测试条件1时,我还测试了saveSalary()saveEmployee()方法中的零件。

在这个场景中,当我在同一个单元测试类中使用另一个测试方法测试条件2时,我是否也应该再次测试saveSalary()saveEmployee()方法?还是仅仅验证它们为verify(employeeRepository, times(1)).saveSalary(any());verify(employeeRepository, times(1)).saveEmployee(any());就足够了?对于这种情况,正确的方法是什么?

您的问题揭示了答案。。。

在使用每种测试方法编写UnitTest时,我们都会记录关于被测代码(cut(行为的单一期望

根据您的问题,我理解您希望剪切调用employeeRepository上的方法,而不管返回的值是多少。因此,我有三个测试方法,每个条件一个,另一个不满足任何一个条件,它们验证employeeRepository上的方法是否被调用(无论参数值如何(。此外,Id还有第四个测试方法来验证employeeRepository上的方法是否使用预期的参数调用(因为它们不依赖于条件(,并且可能以正确的顺序调用。

最新更新