检测未进行任何断言的JUnit“测试”

5
我们曾有一个技术总监,他喜欢编写代码并且非常热衷于添加单元测试。但不幸的是,他偏爱的测试风格是将一些输出显示在屏幕上,并以目视检查结果为主。
考虑到我们拥有大量的测试用例,有没有工具或技术可以帮助我识别那些测试用例从未进行过断言?
3个回答

2

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

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

编辑:另一个选择是只查找对System.out或他喜欢的输出方式的引用,大多数测试都不会有这个。


1
我不确定是否有相关工具,但想到的思路是双重的。
1. 创建一个TestRule类来跟踪每个测试中asserts的数量(使用静态计数器,在测试开始时清除计数器,在测试结束时断言它不为0)。 2. 在自己的代理中包装Assert类,每次调用时增加TestRule的计数器。
如果你的Assert类被称为Assert,那么你只需要更新导入并将规则添加到测试中。上述机制不是线程安全的,因此如果有多个测试同时运行,则会得到不正确的结果。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接