2016-07-07 50 views
2

我們使用Java插件3.14運行Sonarqube 5.5,並通過sonar-maven-plugin 3.0.2版本調用「mvn clean deploy sonar:sonar」進行分析。爲什麼我們的Hamcrest斷言不被認爲是規則S2699的有效斷言?

我們仍然有違反「至少添加一個斷言到這個測試用例」關於缺少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()是測試類中的一種方法。它只是調用一些休眠取景器,並返回對象的集合:

protected Collection<MyObject> findAll(final HbnFilter filter) 

更新: 當我們改變斷言爲以下,聲納識別斷言。

assertThat(findAll(compareFilter).size(), eq(1)); 
+0

什麼是「findAll」方法?你是用maven分析你的項目嗎?如果不是,你如何提供字節碼分析?由於在java插件版本4.0中的類型推斷有很多改進(需要SQ LTS 5.6),您是否可以嘗試此版本? – benzonico

+0

@benzonico我根據你的輸入更新了問題。雖然上述項目已經是java 8,但我們必須將所有其他項目遷移到java 8,直到我們可以將SQ從5.5更新爲5.6 LTS –

+0

運行分析器和sonarqube服務器需要Java 8,但仍然可以分析項目不是java 8. – benzonico

回答

0

這裏的根本原因是使用JUnit的assertThat方法:

import static org.junit.Assert.assertThat; 

代替Hamcrest的一個:

import static org.hamcrest.MatcherAssert.assertThat; 

我最近遇到的problem with the same solution