让我们假设下面的Java类创建JUnit测试:在Eclipse工作区涵盖其所有调用的方法
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)的一个实例。因此,使用data
的expression
的评估取决于两者的组合。通常,expression
是一个固定值,不会经常变化,并且data
可以在所有调用中更改。
好吧,某个时候以后在MyClass.methodA(String,String)
中发现了一个错误。该错误驻留在某些基础类中,仅发生在expression
和data
的某些特殊组合中。 JUnit测试很容易为这种特殊情况编写,并且可以修复。
不幸的是,这种方法在整个项目中都经常使用。 Eclipse调用层次结构标识了使用此方法的其他多个方法。我现在担心回归,如果我只是应用bugfix。为了感觉更安全,我想做一些回归测试。
通常,单元测试应该考虑所有重要的调用类型,特别是边界情况。但是,由于expression
是一个可以变化很大的DSL,因此测试并不容易 - 涵盖了所有潜在的使用情况。此外,这些测试不会识别依赖该错误的错误用法。
所以我的想法是通过以下方式进行:
找到这种方法的所有调用(如Eclipse中使用“呼叫层次”),并提取所有的值
expression
。为
data
(例如,从数据库)提取足够多的实际值并使用原始版本MyClass.methodA(String,String)
交叉评估第一步中的所有表达式。将三元组(data, expression, result)
保存到一个文件。执行bugfix。
测试方法
MyClass.methodA(String,String)
使用上述文件来声明结果没有改变。
以下问题:
你觉得这个方法的?
在Eclipse中使用调用层次结构我只能复制和粘贴调用方法,但不能将确切的调用(包括参数)包含到剪贴板(参见步骤1)。我必须手动为每个找到的方法复制调用调用。如何以便捷的方式提取调用(在完整的Eclipse工作区中,因此在多个项目中)?
恕我直言,我只测试一种单一的方法,因此测试只涵盖一个单位。在第4步中使用JUnit还是有些更复杂的东西?
嗯,显然没有人真正给出一个更好的答案,我不得不承认,我传播我的问题的答案,只是想获得这种方法的一些反馈,我会选择下面给出的唯一答案,因为它恰恰印证我的看法。 – SimonTheSorcerer 2012-09-06 13:25:03