단위 테스트 코드는 메서드 단위로 대부분 작성된다고 생각하면 될 것 같습니다.
단위 테스트를 위한 테스트 케이스를 작성하기 위해서 우리가 흔히 참고할 수 있는 가이드 원칙으로 F.I.R.S.T 원칙을 참고할 수 있습니다.
F.I.R.S.T 원칙이 어떤 원칙을 의미하는지 살짝 들여다보겠습니다.
일반적으로 작성한 테스트 케이스는 빨라야 한다는 의미입니다. 작성한 테스트 케이스가 너무 느리다면 테스트 케이스를 돌려보고 싶은 마음이 잘 들지 않을 것입니다.
자주 돌려야 문제를 빨리 찾을 텐데, 너무 느려서 돌리기 힘들다면 테스트 케이스를 작성하는 의미가 퇴색될 것입니다.
각각의 테스트 케이스는 독립적이어야 한다는 의미입니다.
일반적으로 우리가 테스트 케이스를 작성할 때, 클래스 단위로 해당 클래스 내의 메서드 동작을 테스트 합니다.
메서드는 여러 개 존재할 가능성이 높을 테니 테스트 클래스 안에 테스트 케이스도 하나 이상이 될 것입니다.
이때, 어떤 테스트 케이스를 먼저 실행시켜도 실행되는 순서와 상관없이 정상적인 실행이 보장되어야 합니다.
예를 들어, A라는 테스트 케이스를 먼저 실행시킨 후에 다음으로 B라는 테스트 케이스를 실행시켰더니 테스트에 실패하게 된다면 테스트 케이스끼리 독립적이지 않은 것입니다.
테스트 케이스는 어떤 환경에서도 반복해서 실행이 가능해야 된다는 의미입니다. IntelliJ 같은 여러분의 IDE에서 버튼을 눌러서 실행을 하든, Gradle 같은 빌드 태스크를 직접 입력해서 실행을 하든, 로컬 환경이나 서버 환경에서 실행하든 반복해서 같은 결과를 확인할 수 있어야 합니다.
외부 서비스나 외부 리소스가 연동되는 경우 앞에서 언급한 원칙들을 포함해서 동일한 테스트 결과 역시 보장하지 못하기 때문에 단위 테스트 시에는 외부의 서비스나 리소스의 연동을 끊어주는 것이 바람직합니다.
단위 테스트는 성공 또는 실패라는 자체 검증 결과를 보여주어야 한다는 의미입니다.