验证是不是在 Assertj 中调用了断言

Posted

技术标签:

【中文标题】验证是不是在 Assertj 中调用了断言【英文标题】:Verify that assertions have been called in Assertj验证是否在 Assertj 中调用了断言 【发布时间】:2018-03-21 12:53:59 【问题描述】:

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

assertThat(object.getField());

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

【问题讨论】:

【参考方案1】:

SonarJava 具有规则 S2970“断言应该是完整的”,它可以检测 assertThat 而无需断言 AssertJ、Fest 和 Truth。

见:https://rules.sonarsource.com/java/RSPEC-2970

【讨论】:

【参考方案2】:

如the AssertJ FAQ中所说:

由于在 2.5+ / 3.5+ 中引入并在 2.7+ / 3.7+ 中改进的 CheckReturnValue 注释,SpotBugs/FindBugs/ErrorProne 等静态代码分析工具现在可以检测到此类问题。

事实上,SpotBugs 很容易发现这个问题,因为我刚刚使用 AssertJ 3.9.0、Java 8 和 SpotBugs 3.1.1 进行了测试:

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

【讨论】:

以上是关于验证是不是在 Assertj 中调用了断言的主要内容,如果未能解决你的问题,请参考以下文章

流式断言器AssertJ介绍

流式断言器AssertJ介绍

走进Java接口测试之流式断言库AssertJ

单元测试断言利器 AssertJ

断言AssertJ使用方式

JUnit 5:如何断言抛出异常?