빈 리스트에서 사용된 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.