假设您在业务层中有一个类的方法check(),它对该类的实例进行一些验证。如果该类的属性a具有特定值,则检查具有形式,属性b需要具有某个其他值(即确定b)。例如,该方法可以在内部使用包含a和b的所有有效组合的映射:
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;
}
现在,如果您想对该方法进行单元测试。您应该实施哪些测试用例:
方法2导致较少的单元测试用例(因此对它们的维护工作量较少)。但是,在哪里是实际测试该方法从业务角度进行正确检查的正确位置(例如,如果有效组合的映射中包含正确的值?)。
如果你选择第1号方法,你应该添加额外的测试用例,如果你改变实现,可以说map base to if语句,因为你获得了更多的方法执行路径?
编辑:我考虑的是这些测试会为我们的测试套件增加多少价值。让我们说如果去check()方法的基于地图的实现,有什么用途将地图的内容复制到我的测试用例中。关于hidro提示使用paraterized测试。他们仍然需要从某个地方获取他们的参数(并且很可能不是在check()的实现中),因此这些值在某种程度上是重复的。我更多地考虑实际值的测试和检查方法的完整性是由QA或业务部门在验收测试中完成的,其中我的单元测试只是检查我的代码的执行路径而不一定允许值的所有组合。有什么想法吗?答案 0 :(得分:0)
我的经验法则是:
assert
。如果要一起评估,只能使用多个assert
。assert
编写测试,直到覆盖所有执行路径,这意味着多个测试可能共享相同的assert
输出,但具有不同的输入值,这些都会导致相同的期望。现在,如果你开始在测试课中看到很多重复,那就不用了。
@dataProvider
或Java's JunitParams,其中包含一个'表格'测试规范,执行相同的测试代码(相同的assert
)。