“检测JUnit”;测试“;从不断言任何事

“检测JUnit”;测试“;从不断言任何事,junit,assert,Junit,Assert,我们曾经有一位技术总监,他喜欢贡献代码,也非常热衷于添加单元测试。不幸的是,他更喜欢的测试方式是产生一些输出到屏幕,并目视检查结果 鉴于我们有大量的测试,是否有任何工具或技术可以用来识别那些从未断言过的测试?不确定是否有工具,但我想到的是两个方面 创建一个TestRule类,跟踪每个测试的断言数(使用静态计数器、在测试开始时清除计数器、在测试结束时断言它不是0) 将Assert类包装在您自己的代理中,该代理在每次调用TestRule时递增TestRule的计数器 您的Assert类称为Asser

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


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

不确定是否有工具,但我想到的是两个方面

  • 创建一个TestRule类,跟踪每个测试的断言数(使用静态计数器、在测试开始时清除计数器、在测试结束时断言它不是0)

  • 将Assert类包装在您自己的代理中,该代理在每次调用TestRule时递增TestRule的计数器


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

    因为这是一次性操作,我会:

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

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

    如果这些测试是唯一产生输出的测试,则自动批量替换
    System.out.println(
    with
    org.junit.Assert.fail(“修复测试:”+
    将精确地突出显示那些没有发挥作用的测试。这种技术将使在运行后在IDE中检查这些测试变得容易,并决定是否修复或删除它们;它还提供了一个清晰的进度指示