0

让我们假设以下 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是表达式语言 (DSL) 的一个实例。因此,expression使用的评价data取决于两者的结合。通常,expression是一个固定值,不会经常data更改,并且可以在所有调用中更改。

好吧,后来发现了一个错误MyClass.methodA(String,String)。该错误存在于某些基础类中,并且仅在 和 的某些特殊组合中expression发生data。JUnit 测试很容易针对这种特殊情况编写并且可以修复。

不幸的是,这种方法在整个项目中经常使用。Eclipse 调用层次结构标识了超过 97 个使用此方法的其他方法。如果我只是应用错误修复,我现在害怕回归。为了感觉更安全,我想做一些回归测试。

通常,单元测试应该考虑所有重要的调用类型,尤其是边界情况。但是,由于expressionDSL 变化很大,因此要测试覆盖所有潜在用途并不容易。此外,这些测试不会识别依赖于错误的错误使用。

所以我的想法是按照以下方式进行:

  1. 查找此方法的所有调用(例如在 Eclipse 中使用“调用层次结构”)并提取expression.

  2. data为(例如从数据库)采样足够的真实值,并使用原始版本的MyClass.methodA(String,String). 将三元组保存(data, expression, result)到文件中。

  3. 实施错误修复。

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

以下问题

您如何看待这种方法?

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

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

4

1 回答 1

0

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

从您的软件中收集现实生活中的样本值并将它们保存到一个有代表性的文件中应该不会那么复杂,并且在我看来是分析这件事的最佳方式。即使您必须手动复制它。

于 2012-07-26T10:10:20.567 回答