2012-07-25 50 views
0

让我们假设下面的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)的一个实例。因此,使用dataexpression的评估取决于两者的组合。通常,expression是一个固定值,不会经常变化,并且data可以在所有调用中更改。

好吧,某个时候以后在MyClass.methodA(String,String)中发现了一个错误。该错误驻留在某些基础类中,仅发生在expressiondata的某些特殊组合中。 JUnit测试很容易为这种特殊情况编写,并且可以修复。

不幸的是,这种方法在整个项目中都经常使用。 Eclipse调用层次结构标识了使用此方法的其他多个方法。我现在担心回归,如果我只是应用bugfix。为了感觉更安全,我想做一些回归测试。

通常,单元测试应该考虑所有重要的调用类型,特别是边界情况。但是,由于expression是一个可以变化很大的DSL,因此测试并不容易 - 涵盖了所有潜在的使用情况。此外,这些测试不会识别依赖该错误的错误用法。

所以我的想法是通过以下方式进行:

  1. 找到这种方法的所有调用(如Eclipse中使用“呼叫层次”),并提取所有的值expression

  2. data(例如,从数据库)提取足够多的实际值并使用原始版本MyClass.methodA(String,String)交叉评估第一步中的所有表达式。将三元组(data, expression, result)保存到一个文件。

  3. 执行bugfix。

  4. 测试方法MyClass.methodA(String,String)使用上述文件来声明结果没有改变。

以下问题

你觉得这个方法的?

在Eclipse中使用调用层次结构我只能复制和粘贴调用方法,但不能将确切的调用(包括参数)包含到剪贴板(参见步骤1)。我必须手动为每个找到的方法复制调用调用。如何以便捷的方式提取调用(在完整的Eclipse工作区中,因此在多个项目中)?

恕我直言,我只测试一种单一的方法,因此测试只涵盖一个单位。在第4步中使用JUnit还是有些更复杂的东西?

+0

嗯,显然没有人真正给出一个更好的答案,我不得不承认,我传播我的问题的答案,只是想获得这种方法的一些反馈,我会选择下面给出的唯一答案,因为它恰恰印证我的看法。 – SimonTheSorcerer 2012-09-06 13:25:03

回答

0

由于测试软件的预期附加值是为了覆盖大多数情况下的最低成本和最大结果,我同意你的方法。

从软件收集现实生活中的samplevalues并将它们保存到一个文件代表不应该是复杂的实现,似乎我来分析这件事的最佳方法。即使你必须手动复制它。

相关问题