테스트는 `assertions`를 포함해야 합니다.

 

assertions이 없는 테스트케이스는 예외가 발생하지 않도록 보장합니다. 기본적인 실행 가능성 외에도 테스트 대상 코드의 동작에 대해 아무것도 보장하지 않습니다.

이 룰은 다음과 같은 프레임워크들에서 assertions가 없는 테스트에 대하여 예외를 일으킵니다.

  • AssertJ
  • Awaitility
  • EasyMock
  • Eclipse Vert.x
  • Fest 1.x and 2.x
  • Hamcrest
  • JMock
  • JMockit
  • JUnit
  • Mockito
  • Rest-assured 2.x, 3.x and 4.x
  • RxJava 1.x and 2.x
  • Selenide
  • Spring’s org.springframework.test.web.servlet.ResultActions.andExpect() and org.springframework.test.web.servlet.ResultActions.andExpectAll()
  • Truth Framework
  • WireMock

또한, 새로운 또는 커스텀 assertion 프레임워크가 사용될 수 있으므로 규칙을 매개변수화하여 assertion으로 간주되는 특정 메서드를 정의할 수 있습니다. 이러한 함수들이 테스트 케이스에서 발견될 때, 아무런 이슈도 발생하지 않습니다.

매개 변수 값의 형식은 <FullyQualifiedClassName>#<MethodName>이어야 합니다. 여기서 MethodName은 와일드카드 문자로 끝날 수 있습니다. 생성자의 경우 패턴은 <FullyQualifiedClassName>#<init>이어야 합니다.

Example: com.company.CompareToTester#compare*,com.company.CustomAssert#customAssertMethod,com.company.CheckVerifier#<init>.

규칙을 어긴 코드

@Test
public void testDoSomething() {  // 규칙을 어긴 코드
    MyClass myClass = new MyClass();
    myClass.doSomething();
}

규칙을 준수한 해결책

import com.company.CompareToTester;

@Test
public void testDoSomething() {
    MyClass myClass = new MyClass();
    assertNull(myClass.doSomething());  // JUnit assertion
    assertThat(myClass.doSomething()).isNull();  // Fest assertion
}

@Test
public void testDoSomethingElse() {
    MyClass myClass = new MyClass();
    new CompareToTester().compareWith(myClass);  // 규칙을 준수한 해결책 - 커스텀 assertion 함수는 룰 매개변수로 정의되었습니다.
    CompareToTester.compareStatic(myClass);  // 규칙을 준수한 해결책
}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project