기능은 주어진 상황에 따라 다르게 동작한다
예를 들어, 아래코드를 보자
File file = new File("data.txt");
long sum = MathUtils.sum(file);
data.txt가 어떤 상황이냐에 따라 sum의 결과는 익셉션이 나야할 수도있다.
given , when, then
- 이 구조에 너무 집착하지마라
- 도움은 되지만, 모든 테스트 메소드를 이렇게 작성해야하는 건 아니다
- 테스트 코드를 보고 이해하면 된다
외부 상황과 외부 결과
- 파일데이터를 테스트해야하는 상황
- 외부상황에 맞게 코드 내에서 모든 상황을 설정한다
외부상태가 테스트결과에 영향을 주지않게 하기
- 테스트코드는 반복 테스트 하여 언제 실행해도 정상 동작하는게 중요
- 아이디 중복 체크하는 로직
- 디비 상태에 따라 중복이 될수도있고 안될수도 있다
- 떄문에 테스트를 실행할때 미리 디비에서 제거하거나 롤백을 시켜야한다
중요하다고 생각이드는 외부상태와 테스트의 어려움
외부 API를 이용하는 로직인경우 테스트하기가 힘들다 이럴때 "대역(Double)"을 사용하면 편리하다