捕获Java中的假单元测试

捕获Java中的假单元测试,java,unit-testing,jacoco,Java,Unit Testing,Jacoco,我有一些测试在我的回购协议中没有资产,尽管jacoco提供了很好的覆盖率。除了更好的代码检查之外,还有什么方法可以检测这样的测试吗?使用PMD。它有一个无任何断言的单元测试的标准规则。使用PMD。对于没有任何断言的单元测试,它有一个标准规则。如果您的目的只是为了发现轻微错误的测试,即那些缺少任何assert语句的测试,那么像PMD这样的检查程序可能会完成这项工作。您可能会得到一些误报,即对于实际测试目标只是确保SUT不会抛出异常的测试(Peter Lawrey的评论中提到的一个案例) 然而,在测

我有一些测试在我的回购协议中没有资产,尽管jacoco提供了很好的覆盖率。除了更好的代码检查之外,还有什么方法可以检测这样的测试吗?

使用PMD。它有一个无任何断言的单元测试的标准规则。

使用PMD。对于没有任何断言的单元测试,它有一个标准规则。

如果您的目的只是为了发现轻微错误的测试,即那些缺少任何
assert
语句的测试,那么像PMD这样的检查程序可能会完成这项工作。您可能会得到一些误报,即对于实际测试目标只是确保SUT不会抛出异常的测试(Peter Lawrey的评论中提到的一个案例)

然而,在测试中还有更多的问题不容易发现:断言可能是错误的(
assertTrue(isPrime(9))
),或者,断言可能只解决了相关方面的一部分(比如,在处理有理数时,只检查分子而不检查分母)

对于这些质量问题的检测,也存在一些方法,比如变异测试,这在一定程度上是有帮助的。而且,在编写测试时,首先:使用测试优先开发过程确保测试至少失败一次

然而,测试套件可能存在与执行的测试集无关的其他问题,但与非功能性质量标准有关:测试执行时间、测试套件的可维护性、测试失败时诊断输出的表达性等


当您对检测这些类型的问题感兴趣时,我认为审查是不可避免的。

如果您的目的只是为了发现细微的错误测试,即那些缺少任何
断言
语句的测试,那么PMD之类的检查程序可能会完成这项工作。您可能会得到一些误报,即对于实际测试目标只是确保SUT不会抛出异常的测试(Peter Lawrey的评论中提到的一个案例)

然而,在测试中还有更多的问题不容易发现:断言可能是错误的(
assertTrue(isPrime(9))
),或者,断言可能只解决了相关方面的一部分(比如,在处理有理数时,只检查分子而不检查分母)

对于这些质量问题的检测,也存在一些方法,比如变异测试,这在一定程度上是有帮助的。而且,在编写测试时,首先:使用测试优先开发过程确保测试至少失败一次

然而,测试套件可能存在与执行的测试集无关的其他问题,但与非功能性质量标准有关:测试执行时间、测试套件的可维护性、测试失败时诊断输出的表达性等


当您对检测这些类型的问题感兴趣时,我会认为评论是不可避免的。

您可以编写一个Java程序,将用于单元测试的*.Java文件读取为文本,并检查这些文件中的方法是否具有
Assert
,如果您能够找到正则表达式,您可能可以使用类似checkstyle的方法来捕捉这一点。或者自定义Findbugs检测器。不引发异常或期望引发异常的测试仍然是有效的测试。您可以编写一个Java程序,将*.Java文件作为文本读取用于单元测试,并检查这些文件中的方法是否具有
Assert
。如果您能够弄清楚,您可能可以使用类似于checkstyle的方法来捕获这一点正则表达式。或自定义Findbugs检测器。不引发异常或预期引发异常的测试仍然是有效的测试。PMD有一个用于JUnit断言的测试。我正在使用testng。这是用于testng规则的带有PMD的票证:您也可以编写自己的PMD规则。团队可能会感谢任何帮助移动票据的贡献。PMD有一个JUnit断言。我正在使用testng。这是用于testng规则的带有PMD的票证:您也可以编写自己的PMD规则。团队可能会感谢任何有助于移动票据的贡献。