더북(TheBook)

테스트 자체는 특별할 것이 없어 보인다. 하지만 동일한 시나리오에서 여러 테스트를 작성하고 싶다면 어떻게 해야 할까? 종료점이 여러 개이거나 동일한 종료점에서 여러 값을 테스트하고자 할 때 문제가 생길 수 있다. 예를 들어 오류가 하나만 있는지 확인하고 싶다고 가정해 보자. 이 경우 테스트 코드에 한 줄만 추가하면 된다.

verifier.addRule(fakeRule);
const errors = verifier.verify('any value'); 
expect(errors.length).toBe(1); ----- 새롭게 추가한 검증 코드  
expect(errors[0]).toContain('fake reason');

새롭게 추가한 검증 코드가 실패하면 어떻게 될까? 첫 번째 검증이 실패하면 테스트 러너는 오류를 받고 다음 테스트로 이동하므로 두 번째 검증 코드는 실행되지 않는다.

그래도 두 번째 검증이 통과했는지 알고 싶지 않은가? 첫 번째 검증 코드를 주석 처리하고 테스트를 다시 실행해 볼 수도 있다. 하지만 이는 좋은 테스트 실행 방식이 아니다. 제라드 메스자로스가 쓴 <xUnit 테스트 패턴>에서는 이러한 행동을 검증 룰렛(assertion roulette)이라고 한다. 이는 테스트를 실행할 때 많은 혼란과 잘못된 거짓 양성23을 초래할 수 있다.

예제 2-12처럼 이 추가 검증 코드를 별도의 테스트 케이스로 분리하고 이해하기 쉬운 이름을 붙이는 것이 더 낫다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.