Java 为覆盖Eclipse工作区中所有调用的方法创建JUnit测试
让我们假设以下Java类:Java 为覆盖Eclipse工作区中所有调用的方法创建JUnit测试,java,junit,regression-testing,Java,Junit,Regression Testing,让我们假设以下Java类: class MyClass { public String methodA( String data, String expression ) { // expression is evaluated using data // ... // this leads to a result which is returned return result; } } 请注意,expression是表达式语言(DS
class MyClass {
public String methodA( String data, String expression ) {
// expression is evaluated using data
// ...
// this leads to a result which is returned
return result;
}
}
请注意,expression
是表达式语言(DSL)的一个实例。因此,使用数据
对表达式
进行评估取决于两者的组合。通常,表达式
是一个固定值,不会经常更改,数据
可以在所有调用过程中更改
好的,稍后在MyClass.methodA(String,String)
中发现了一个bug。该错误存在于某个底层类中,仅在表达式
和数据
的某些特殊组合中出现。JUnit测试很容易为这种特殊情况编写,并且可以修复
不幸的是,这种方法在整个项目中经常使用。Eclipse调用层次结构标识了使用此方法的97多个其他方法。我现在害怕回归,如果我只是应用错误修复。为了更安全,我想做一些回归测试
通常,单元测试应该考虑所有重要类型的调用,尤其是边界情况。但是,由于
expression
是一种变化很大的DSL,所以测试覆盖所有潜在用途并不容易。此外,这些测试不会识别依赖于bug的错误使用
因此,我的想法是按照以下方式进行:
表达式的所有值
数据
采样足够多的实际值(例如来自数据库),并使用原始版本的MyClass.methodA(String,String)
交叉计算第一步中的所有表达式。将三元组(数据、表达式、结果)
保存到文件中MyClass.methodA(String,String)
使用上述文件断言结果没有改变IMHO我只测试一种方法,因此测试只覆盖一个单元。在步骤4中使用JUnit可以吗?还是有更复杂的东西?由于测试软件的预期附加值是以最低的成本和最大的结果覆盖大多数情况,我同意您的方法
从你的软件中收集现实生活中的SampleValue并保存到一个有代表性的文件中应该不会那么复杂,在我看来,这是分析这件事的最好方法。即使您必须手动复制。显然没有人给出更好的答案,我不得不承认,我在问题中传播了一个答案,只是想获得一些反馈,我将选择下面给出的唯一答案,因为它只是确认了我的观点。