验证是否已在Assertj中调用断言

时间:2018-03-21 12:53:59

标签: java sonarqube assertj

我正在阅读使用Assertj验证结果的测试类。 偶尔,我发现了断言没有断言。

{{1}}

是否有可能在开发周期的某个地方识别这些类?我的第一个猜测是使用自定义声纳规则。虽然我不知道如何定义这个方法应该跟一个断言(一个返回void的方法?)。

2 个答案:

答案 0 :(得分:4)

SonarJava正在使用规则S2970“断言应该是完整的”,它可以检测assertThat而不会断言AssertJ,Fest和Truth。

请参阅:https://rules.sonarsource.com/java/RSPEC-2970

答案 1 :(得分:2)

正如the AssertJ FAQ所说:

  

SpotBugs / FindBugs / ErrorProne等静态代码分析工具现在可以检测到这些问题,这要归功于2.5 + / 3.5+中引入的CheckReturnValue注释以及2.7 + / 3.7 +中的改进。

事实上,SpotBugs很容易发现这个问题,因为我刚刚使用AssertJ 3.9.0,Java 8和SpotBugs 3.1.1进行了测试: SpotBugs: "Return value of <code>assertThat()</code> ignored"

因此,如果您在静态分析工具中没有看到此警告,可能是您已禁用使用@CheckReturnValue注释的方法返回值的检查。