2.5.4 문자열 비교와 유지 보수성
예제 2-5의 테스트 코드에서 검증 부분의 코드를 다음과 같이 바꾸었다.
expect(errors[0]).toContain("fake reason");
문자열 비교(comparison)는 테스트에서 많이 사용하는 방식이다. 하지만 우리는 단순한 문자열의 동등 비교를 하려는 것이 아니라, ‘fake reason’ 같은 실패 이유가 결과에 포함되었는지 확인하고 싶다. 문자열을 비교하면 유지 보수성이 다소 떨어진다. 정규 표현식을 사용하는 toMatch(/string/) 패턴이나 toContain() 메서드를 사용하면 나중에 테스트 대상 코드가 변경되더라도 테스트가 실패할 가능성을 줄일 수 있어 좋다.
우리가 넣는 문자열은 화면에 보인다. 즉, 사람이 보고 느낄 수 있는 무언가다. 그러다 보면 화면의 디자인 관점에서 문장 끝에 공백이 추가되거나 마침표가 빠질 수 있다. 중요한 것은 메시지가 담고 있는 의미다. 메시지 의미가 같다면 문장의 마침표가 새로 추가된 정도의 변경은 테스트 결과에 영향을 주지 않아야 한다. 이것이 필자가 테스트에서 권장하고 싶은 사고방식이다. 테스트 코드는 동일한 비즈니스 로직에서 항상 같은 결과를 보장해야 하기에 테스트의 유지 보수성과 불안전성을 줄이는 것을 우선시해야 한다.