본문 바로가기

책/테스트 주도 개발 시작하기(완)

6장 테스트 코드의 구성

기능에서의 상황

  • 기능은 주어진 상황에 따라 다르게 동작한다.
  • 결과에 영향을 줄 수 있는 모든 상황을 완벽하게 찾기 힘들 수도 이지만 가능한 많은 예외 상황을 찾기 위해 노력해야 한다.

테스트 코드의 구성요소 : 상황, 실행, 결과 확인

  • 기능은 상황에 따라 결과가 달라진다. 테스트 코드는 기능을 실행하고 그 결과를 확인하므로 상황, 실행, 결과 확인의 세 가지 요소로 테스트를 구성할 수 있다.
  • 상황, 실행, 결과 확인은 영어 표현 given, when, then에 대응한다.
  • JUnit에서 상황을 설정하는 방법은 테스트할 대상에 따라 달라진다.
    1. 객체를 생성해서 상황을 설정
    2. @BeforeEach를 적용한 메서드에서 상황을 설정
    3. 상황이 없는 경우도 존재한다.
  • 실행 결과를 확인하는 쉬운 방법은 리턴 값을 사용하는 것이다.
  • 실행 결과가 항상 리턴 값으로 존재하는 것은 아니다. 실행 결과로 익센션을 발생하는 것이 정상인 경우도 있다.
  • 상황-실행-결과 확인 구조에 너무 집착하지는 말자.
  • 테스트 코드를 보고 테스트 내용을 이해할 수 있으면 된다.

외부 상황과 외부 결과

  • 상황 설정이 테스트 대상으로 국한된 것은 아니다. 상황에는 외부 요인도 있다.
  • 테스트 실행할 때마다 동일한 결과를 보장해야 하는데 우연에 의해 테스트 결과가 달라지면 동일한 결과를 보장할 수 없다.
  • 명시적으로 파일이 없는 상황을 만드는 것이다.
  • 테스트에 맞게 준비한 파일은 버전 관리 대상에 추가한다.
  • 파일을 미리 만들지 않고 테스트 코드에서 상황에 맞는 파일을 생성하는 방법도 있다.

외부 상태가 테스트 결과에 영향을 주지 않게 하기

  • 테스트는 언제 실행해도 항상 정상적으로 동작하는 것이 중요하다.
  • 외부 상태에 따라 테스트의 성공 여부가 바뀌지 않으려면 테스트 실행 전에 외부를 원하는 상태로 만들거나 테스트 실행 후에 외부 상태를 원래대로 되돌려 놓아야 한다.
  • 테스트 대상의 상황과 결과에 외부 요인이 관여할 경우 대역을 사용하면 테스트 작성이 쉬워진다.

' > 테스트 주도 개발 시작하기(완)' 카테고리의 다른 글

8장 테스트 가능한 설계  (3) 2024.07.23
7장 대역  (1) 2024.07.17
4장 TDD, 기능 명세, 설계  (0) 2024.07.09
3장 테스트 코드 작성 순서  (1) 2024.07.09
2장 TDD 시작  (0) 2024.07.03