我们曾经有一个技术总监,他喜欢贡献代码,也非常热衷于添加单元测试。不幸的是,他喜欢的测试风格是产生一些输出到屏幕上,并直观地检查结果。
假设我们有一个大的测试库,是否有任何工具或技术可以用来识别从未断言的测试?
由于这是一次操作,我将:
- 扫描所有测试方法(简单,获取jUnit报告XML)
- 使用IDE或其他工具搜索Assert的引用。*,将结果导出为方法列表
- awk/perl/excel查找不匹配的结果
编辑:另一个选择是只查找对System的引用。不管他喜欢的输出方式是什么,大多数测试都不会有这个。
不确定这是一个工具,但我想到的是双重的。
-
创建一个TestRule类来跟踪每个测试的断言数(使用静态计数器,在测试开始时清除计数器,在测试结束时断言它不是0)。
-
把Assert类包装在你自己的代理中,这样每次调用TestRule时,它的计数器就会递增。
如果您的Assert类名为Assert,则您只需要更新导入并将规则添加到测试中。上面描述的机制不是线程安全的,所以如果您同时运行多个测试,您将得到不正确的结果。
如果这些测试是唯一产生输出的测试,那么用org.junit.Assert.fail("Fix test: " +
自动批量替换System.out.println(
将准确地突出显示那些没有发挥其作用的测试。这种技术可以很容易地在运行后在IDE中检查这些测试,并决定是修复还是删除它们;它还提供了进度的清晰指示。