Sonarquest 5.6.1をJava Plug-in 4.1で実行していて、SonarルールS2699(テストにアサーションが含まれている必要があります)を使用しています。中ソナールールS2699:すべてのアサートが有効なアサーションとして認識されない
import mypackage.Citit1543Dummy;
import mypackage.Citit1543OtherDummy;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isIn;
import static org.hamcrest.Matchers.lessThan;
import static org.hamcrest.core.IsNot.not;
import static org.mockito.Matchers.notNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.junit.Assert.assertThat;
public class Citit1543Test {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test1() {
assert true;
}
@Test
public void test2() {
Assert.assertTrue(1 > (2-3));
}
@Test
public void test3() {
Assert.assertFalse(1 > (100-1));
}
@Test
public void test4() {
Assert.assertThat("test", 1, is(1));
}
@Test
public void test5() {
Assert.assertArrayEquals(new String[0], new String[0]);
}
@Test
public void test6() {
Assert.assertEquals(1 > 0, true);
}
@Test
public void test7() { // asserts in another method
test7asserts(1, 1);
}
private void test7asserts(int a, int b) {
Assert.assertTrue(a == b);
}
@Test
public void test8() {
test8asserts(1, 2);
}
private void test8asserts(int a, int b) {
Assert.assertNotSame(a, b);
}
@Test
public void test9() {
Citit1543Dummy dummy = new Citit1543Dummy();
dummy.otherDummy = mock(Citit1543OtherDummy.class);
dummy.doSomething();
verify(dummy.otherDummy, times(1)).doSomething();
}
@Test
public void test10() {
Citit1543Dummy dummy = new Citit1543Dummy();
dummy.otherDummy = mock(Citit1543OtherDummy.class);
dummy.doSomething();
test10verifies(dummy.otherDummy);
}
private void test10verifies(Citit1543OtherDummy otherDummy) {
verify(otherDummy, times(1)).doSomething();
}
@Test
public void test11() {
Assert.assertThat("test", "", not(1));
}
@Test
public void test12() {
Assert.assertThat("test", 1, lessThan(2));
}
@Test
public void test13() {
Long[] arr = new Long[] { 1L, 2L, 3L, 4L };
assertThat("Just testing", arr, is(new Long[] {
1L, 2L, 3L, 4L
}));
}
}
当社Sonarqubeインスタンスフラグテストケースtest1
(認識されない文を主張)、test7
(別の方法でステートメントをアサート)、test8
(同)、test10
(Mockitos verify
この例のテストクラスを使用して
別の方法)、test11
およびtest13
をアサーションのないメソッドとして使用します。私は確かに認識されない多くのメソッドがあると確信しています(残念ながら、私たちはプロジェクト全体でさまざまな模擬/テストフレームワークを使用しています)。
今のところ、私たちはアサート/検証の1つが認識されないときは常に//NOSONAR
に始めました。 これらのメソッドを有効なアサートとして認識させる簡単な方法はありますか?
test1フラグは間違いなく偽陽性ではありません。テストを実行するときに '-ea'を指定しないと、assertは無視されます。また、単体テストでのアサーションを検証するためのものでもありません。だから、バグを修正して無視しないでください。 –