在单元测试中,当一个方法中存在多个条件时,我想知道是否应该测试该方法的相同部分。我的意思是,例如,在以下方法中有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
上的方法是否使用预期的参数调用(因为它们不依赖于条件(,并且可能以正确的顺序调用。