5

我们曾经有一位技术总监,他喜欢贡献代码,也非常热衷于添加单元测试。不幸的是,他喜欢的测试方式是产生一些输出到屏幕上并目视检查结果。

鉴于我们有大量测试,是否有任何工具或技术可以用来识别从未断言的测试?

4

3 回答 3

2

由于这是一次性操作,我会:

  • 扫描所有测试方法(简单,获取 jUnit 报告 XML)
  • 使用 IDE 或其他工具搜索对 Assert.* 的引用,将结果导出为方法列表
  • awk/perl/excel 查找不匹配的结果

编辑:另一种选择是仅查找对 System.out 的引用或任何他喜欢的输出内容的方式,大多数测试都没有。

于 2013-05-02T15:37:13.840 回答
1

如果这些测试是唯一产生输出的测试,那么自动批量替换System.out.println(withorg.junit.Assert.fail("Fix test: " +将准确突出那些没有发挥作用的测试。这种技术可以很容易地在运行后在 IDE 中检查这些测试并决定是修复还是删除它们;它还清楚地表明了进展。

于 2013-05-03T14:21:36.453 回答
1

不确定工具,但想到的想法是双重的。

  1. 创建一个 TestRule 类来跟踪每个测试的断言数量(使用静态计数器,在测试开始时清除计数器,在测试结束时断言它不为 0)。

  2. 将 Assert 类包装在您自己的代理中,该代理每次调用时都会增加 TestRule 的计数器。

您的 Assert 类是否称为 Assert,您只需要更新导入并将规则添加到测试中。上述机制不是线程安全的,因此如果您同时运行多个测试,您将得到不正确的结果。

于 2013-05-02T15:33:54.983 回答