为什么我们的Hamcrest断言不被认为是规则S2699的有效断言?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我们的Hamcrest断言不被认为是规则S2699的有效断言?相关的知识,希望对你有一定的参考价值。

我们使用Java插件3.14运行Sonarqube 5.5并通过sonar-maven-plugin 3.0.2版分析“mvn clean deploy sonar:sonar”。

我们仍然违反了“在此测试用例中添加至少一个断言”关于缺少断言的信息,当测试代码包含如下所示的内容时。

import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
[...]
@Test
public void testByClassicCompare() throws InvalidPropertiesFormatException {
    final CompareFilter compareFilter = new CompareFilter("gid", 333,    Operation.LT);
    assertThat(findAll(compareFilter), hasSize(1));
}

findAll()是测试类中的一个方法。它只是调用一些hibernate finder并返回一个对象集合:

protected Collection<MyObject> findAll(final HbnFilter filter)

更新:当我们将断言更改为以下内容时,声纳识别出断言。

    assertThat(findAll(compareFilter).size(), eq(1));
答案

这里的根本原因是使用JUnit的assertThat方法:

import static org.junit.Assert.assertThat;

而不是Hamcrest的一个:

import static org.hamcrest.MatcherAssert.assertThat;

我最近遇到了problem with the same solution

以上是关于为什么我们的Hamcrest断言不被认为是规则S2699的有效断言?的主要内容,如果未能解决你的问题,请参考以下文章

Hamcrest 总结

JUnitJUnit Hamcrest 断言

Hamcrest 断言

Hamcrest 断言

03-10 断言

Java Hamcrest学习