【发布时间】:2011-07-16 11:32:31
【问题描述】:
我们对同一个接口有两种不同的实现。将其视为参考和生产实现。这两个实现由不同的团队实现,目标是从两个实现中获得相同的结果。
创建参考实现的团队已经创建了大量基于 Junit 的测试用例(目前大约 700 个测试用例),并且这些单元测试在开发过程中经常运行。我们可以针对生产实现运行相同的测试用例集。
生产实施的功能通过回归测试进行测试。但是,能够针对生产实现运行单元测试可以让我们快速反馈每次我们获得生产代码的新版本时是否出现严重问题。
但由于生产版本中缺少某些功能,或者由于已知错误导致结果不同,因此并非所有测试都通过此实现。这使得早期发现回归变得困难。
这里有几个类别:
(A) 测试用例只对参考实现有意义,对生产实现永远不会重要
(B) 测试用例,在测试生产实现时只需要省略某些断言(即参考实现中报告的附加值)
(C) 已知由于某些功能的开发滞后而无法在生产实现中工作的测试用例,但应稍后包含
到目前为止,我们有以下选择:
用 if 语句围绕仅在参考实现中有效的断言使我们的代码变得混乱。这解决了(B),但很难维护。
使用假设真。这对于 (A) 来说是可以的,但给人的错误印象是 (B) 中的一切都好。
我想要的是
能够基于运行时条件(例如使用假设真)跳过某些测试,但对于 (C),这些测试应报告为已跳过而不是成功
-
有更多的结果状态,考虑到一个测试用例是否已知以前工作过,这给出了
- 已知以前有效的测试用例成功
- 已针对以前已知无法正常工作的测试用例进行了修复
- 之前已知无法运行的测试用例失败
- 已知以前有效的测试用例的回归
- 已跳过
以前有没有人做过类似的事情,或者甚至可以使用 JUnit(最好结合使用 eclipse JUnit 插件)?
【问题讨论】:
标签: java unit-testing junit automated-tests