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

Sonarqube 为什么我们的Hamcrest断言不被认为是规则S2699的有效断言?,sonarqube,Sonarqube,我们使用Java插件3.14运行Sonarqube 5.5,并通过sonar maven插件版本3.0.2调用“mvn clean deploy sonar:sonar”进行分析 当测试代码包含以下内容时,我们仍然会收到关于缺少assertThat的违规“向该测试用例添加至少一个断言” import static org.hamcrest.Matchers.hasSize; import static org.junit.Assert.assertThat; [...] @Test public

我们使用Java插件3.14运行Sonarqube 5.5,并通过sonar maven插件版本3.0.2调用“mvn clean deploy sonar:sonar”进行分析

当测试代码包含以下内容时,我们仍然会收到关于缺少assertThat的违规“向该测试用例添加至少一个断言”

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)

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

import static org.junit.Assert.assertThat;
而不是Hamcrest的:

import static org.hamcrest.MatcherAssert.assertThat;

我最近遇到了一个问题。

什么是“findAll”方法?你在和maven分析你的项目吗?如果没有,您如何为分析提供字节码?由于java插件的4.0版(需要SQ LTS 5.6)对类型推断做了很多改进,您能试用这个版本吗?@benzonico I根据您的输入更新了这个问题。虽然提到的项目已经是java 8,但我们必须将所有其他项目迁移到java 8,直到我们能够将SQ从5.5更新到5.6。运行analyzer和sonarqube服务器需要LTSJava 8,但您仍然可以分析非java 8的项目。请指定findAll方法的完整签名。@benzonico方法签名已添加
import static org.hamcrest.MatcherAssert.assertThat;