Java 相似函数的单元测试
我有setter函数,它通过在更改私有变量之前将输入数据传递给验证函数来检查输入数据。如果数据无效,getter函数将抛出异常。我如何将setter函数和数据验证函数组合在一起,而不重复每个函数的所有输入测试用例?这两个函数以相同的方式验证数据 编辑:对不起,我应该先包含代码Java 相似函数的单元测试,java,unit-testing,Java,Unit Testing,我有setter函数,它通过在更改私有变量之前将输入数据传递给验证函数来检查输入数据。如果数据无效,getter函数将抛出异常。我如何将setter函数和数据验证函数组合在一起,而不重复每个函数的所有输入测试用例?这两个函数以相同的方式验证数据 编辑:对不起,我应该先包含代码 setterFunction(String value) { if (valueValid()) { // Update member variable } else { t
setterFunction(String value) {
if (valueValid()) {
// Update member variable
} else {
throw new RuntimeException("Invalid Data");
}
}
valueValid()和setterFunction都会在相同的值上失败,因此我不希望有重复的测试代码。我认为明智的做法是使用所有测试用例测试验证器,然后使用一两个简单的用例测试setter和getter是否正确调用验证器
这样,如果出现故障,您还可以更好地了解错误所在(验证器或setter/getter)您还可以以不同的方式设计对象。让你的对象定义一个构造函数,它需要一个最小的信息子集来正确地构造一个对象。然后使用另一个方法repInvariant()(),该方法将验证对象中的所有内部变量是否可以组合接受 然后,如果您有一个setter,它可以在设置变量后简单地调用repInvariant()。甚至可能撤消set方法调用
public class A
public A(B b, Cc...) {
this.b = b;
...
this.repInvariant();
}
public void setB(B b) {
var oldB = this.b;
try {
this.b = b;
this.repInvariant();
} catch (InvalidArgumentException e) {
this.b = oldB;
throw e;
}
}
public void repInvariant() {
if (this.b == null) {
throw new IllegalArgumentException("B must not be null");
}
}
}
发布setter、validation和getter方法。如果没有代码可供参考,很难了解您所谈论的内容。这就是我所想的,但我不确定是否有更好的方法我不知道。嗯,我不认为还有更多的方法-这种方法没有重复的测试代码,较小的组件是单独测试的。我认为这是最好的做法,你的常识并没有让你失望。