Assertions는 완료되어야 합니다.

 

테스트 프레임워크를 사용할 때, 작성이 덜 끝난 assertions을 사용하기 쉽습니다. 이 룰은 다음 케이스에 assertions를 완료하도록 강제합니다.

  • Fest: assertThat 함수 다음에 assertion 호출이 없는 경우
  • AssertJ: assertThat 함수 다음에 assertion 호출이 없는 경우
  • Mockito: verify 함수 다음에 함수 호출이 없는 경우
  • Truth: assertXXX 함수 다음에 함수 호출이 없는 경우

이러한 경우, 테스트를 의도했지만 실제로 아무것도 검증하지 않습니다.

규칙을 어긴 코드

// Fest
boolean result = performAction();
// result 값이 true인지 확인해봅시다.
assertThat(result); // 규칙을 어긴 코드; 실제로 확인된 것은 없습니다. 테스트는 "result"가 참(true)이거나 거짓(false)이거나 상관없이 통과합니다.

// Mockito
List mockedList = Mockito.mock(List.class);
mockedList.add("one");
mockedList.clear();
// "add"와 "clear" 함수들이 실제로 호출되는지 확인해봅시다.
Mockito.verify(mockedList); // 규칙을 어긴 코드; 여기서 확인된 것은 없습니다. verify()에 연결된 호출이 없습니다.

규칙을 준수한 해결책

// Fest
boolean result = performAction();
// result 값이 true인지 확인해봅시다.
assertThat(result).isTrue(); // 규칙을 준수한 해결책

// Mockito
List mockedList = Mockito.mock(List.class);
mockedList.add("one");
mockedList.clear();
// "add"와 "clear" 함수들이 실제로 호출되는지 확인해봅시다.
Mockito.verify(mockedList).add("one"); // 규칙을 준수한 해결책
Mockito.verify(mockedList).clear(); // 규칙을 준수한 해결책

예외

private BooleanAssert check(String filename, String key) {
  String fileContent = readFileContent(filename);
  performReplacements(fileContent);
  return assertThat(fileContent.contains(key)); // 여기엔 문제가 없습니다.
}

@Test
public void test() {
  check("foo.txt", "key1").isTrue();
  check("bar.txt", "key2").isTrue();
}

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

원문으로 바로가기

Star This Project