테스트는 랜덤 데이터 대신에 고정된 데이터를 사용해야 합니다.

 

테스트는 항상 다음을 만족해야만 합니다:

  • 프로덕션 코드가 엣지 케이스를 포함하여 예상된 동작을 하도록 해야 합니다.
  • 디버그하기 쉽게 해야 합니다. 즉, 이해할 수 있고 재현할 수 있어야 합니다.

테스트에 랜덤 값을 사용하는 것은 필요하지 않은 엣지 케이스를 확인하는 것입니다. 그리고 테스트 로그를 읽기 힘들게 만듭니다. 쉽게 읽기 좋은 하드코딩된 값을 사용하는 것이 더 낫습니다.

여기 테스트에서 랜덤 데이터에 대한 유효한 유즈 케이스입니다: 모든 값을 테스트하면 테스트가 비현실적으로 느려지는 경우, 랜덤을 사용하여 장기적으로 모든 값을 테스트하는 것이 최선입니다. 랜덤 값을 확실하게 기록하여 실패를 재현할 수 있어야 합니다. 몇가지 라이브러리가 이것들을 쉽게 만들어줍니다. jqwik와 같은 property-based 테스트 라이브러리를 예시로 사용할 수 있습니다.

이 규칙은 new Random(), UUID.randomUUID()을 테스트 코드에서 호출하는 경우 문제를 제기합니다.

규칙을 어긴 코드

int userAge = new Random().nextInt(42);  // 규칙을 어긴 코드
UUID userID = UUID.randomUUID(); // 규칙을 어긴 코드

규칙을 준수한 코드

int userAge = 31;
UUID userID = UUID.fromString("00000000-000-0000-0000-000000000001");

참고


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

원문으로 바로가기

Star This Project