AssertJ assertion인 allMatch와 doesNotContains는 empty에 대해서도 테스트되어야 합니다.

 

빈 리스트에서 사용된 AssertJ assertion의 allMatch와 doesNotContains는 어떤 predicate를 작성하던 항상 참을 반환합니다.
만약 빈 리스트를 예상하는 경우에도 isEmpty() 함수나 isNotEmpty()를 추가하거나 리스트 값을 먼저 테스트해야 하여 명확하게 해야합니다. 쓸모 없는 predicate를 명확하게 하거나 테스트의 신뢰성을 향상시킬 것입니다.

이 규칙은 다음 타켓 함수들이 리스트가 비어있는지 확인하는 assertion 없이 사용되거나 리스트의 값을 테스트하지 않는 경우 문제를 제기합니다.

타겟 함수:

  • allMatch
  • allSatisfy
  • doesNotContain
  • doesNotContainSequence
  • doesNotContainSubsequence
  • doesNotContainAnyElementsOf

규칙을 어긴 코드

List<String> logs = getLogs();

assertThat(logs).allMatch(e -> e.contains(error)); // 규칙을 어긴 코드, 이 테스트는 로그가 비어있는 경우 통과합니다.
assertThat(logs).doesNotContain("error"); // 규칙을 어긴 코드, 어떤 로그를 기대합니까?

규칙을 준수한 코드

List<String> logs = getLogs();

assertThat(logs).isNotEmpty().allMatch(e -> e.contains(error));
// Or
assertThat(logs).hasSize(5).allMatch(e -> e.contains(error));
// Or
assertThat(logs).isEmpty();

// 중복되는 경우에도 빈 리스트가 필요한 이유를 설명하므로 허용합니다.
assertThat(logs).doesNotContain("error").isEmpty();
// 또는 리스트의 내용을 먼저 테스트합니다.
assertThat(logs).contains("warning").doesNotContain("error");

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

원문으로 바로가기

Star This Project