Unit testing 确定一个方法最实用的测试用例数量
假设您的业务层中有一个类的方法check(),该类对该类的实例执行一些验证。检查的形式是,如果该类的属性a具有特定值,则属性b需要具有特定的其他值(即a确定b)。例如,该方法可以在内部使用包含a和b的所有有效组合的映射:Unit testing 确定一个方法最实用的测试用例数量,unit-testing,Unit Testing,假设您的业务层中有一个类的方法check(),该类对该类的实例执行一些验证。检查的形式是,如果该类的属性a具有特定值,则属性b需要具有特定的其他值(即a确定b)。例如,该方法可以在内部使用包含a和b的所有有效组合的映射: public bool check() { if (mapOfValidCombos.get(a)!=b) return false; return true; } 或者它可以在外部csv文件中查找它们,或者它可以由if语句列表组成: public
public bool check() {
if (mapOfValidCombos.get(a)!=b)
return false;
return true;
}
或者它可以在外部csv文件中查找它们,或者它可以由if语句列表组成:
public bool check() {
if (a==1) and (b!=5) then return false;
if (a==2) and (b!=3) then return false;
return true;
}
现在,如果您想对该方法进行单元测试。您应该实现哪些测试用例:
- 您可以测试a和b的所有有效组合,也可以测试无效组合(假设a和b是可枚举类型)
- 您只能为该方法的每个路径创建一个测试用例(例如,一个用于有效组合,一个用于无效组合)
- 如果可能,尝试每个测试方法只使用一个
断言
。如果要同时计算多个
s,则仅使用它们assert
- 使用单个
编写测试,直到覆盖所有执行路径,这意味着多个测试可能共享相同的assert
输出,但具有不同的输入值,所有这些都会导致相同的期望assert
- “参数化”您的测试。我不确定您使用的是哪种语言,但其中许多语言都支持参数化测试,例如,如果给定了测试规范的“表”,则执行相同的测试代码(相同的
断言
)
- 避免编写实用程序方法或类来重用测试代码,从长远来看,这更像是反模式的