김동형수 개발기

테스트 주도 개발 - 2부 23장 본문

책 스터디/[완료] 테스트 주도 개발

테스트 주도 개발 - 2부 23장

김동형수 2022. 10. 3. 23:36

23장 얼마나 달콤한지

 

테스트 메서드 호출하기
먼저 setUp 호출하기
나중에 tearDown 호출하기
테스트 메서드가 실패하더라도 tearDown 호출하기
여러 개의 테스트 실행하기
수집된 결과를 출력하기
WasRun에 로그 문자열 남기기
실패한 테스트 보고하기
setUp 에러를 잡아서 보고하기

 

TestSuite를 다루지 않고는 xUnit을 떠날 수 없다.

 

TestCaseTest 하단에 테스트를 나열하는 모양새는 좋아보이지 않는다.

여러 테스트를 실행할 수 있는 TestSuite를 구현한다.

구조는 TestSuite에서 test를 배열로 가지고 있고 for loop를 수행하면서 실행한다.

 

TestCase.run에 매개변수를 추가하게되면 TestSuite.run에도 매개변수를 추가해야하는데 대안으로 3가지가 떠오른다고 한다.

 

  • 파이썬의 기본 매개 변수 기능을 사용한다. 불행히도 기본값은 런타임이 아닌 컴파일타임에 평가되므로 하나의 TestResult를 재사용할 수 없게된다.
  • 메서드를 두 부분으로 나눈다. 하나는 TestResult를 할당하는 부분, 또 하나는 할당된 TestResult를 가지고 테스트를 수행하는 부분, 그런데 이 두 부분에 대한 좋은 이름이 떠오르질 않는다. 그것은 이렇게 나누는 것이 그리 좋은 전략은 아니라는 것을 뜻한다.
  • 호출하는 곳에서 TestResult를 할당한다.

 

호출하는 곳에서 TestResults를 할당하는 전략을 선택하자. 이 패턴은 매개 변수 수집이라 부른다.

 

이 해법은 run()이 명시적으로 반환하지 않아도 된다는 추가적인 장점이 있다.

 

테스트 메서드 호출하기
먼저 setUp 호출하기
나중에 tearDown 호출하기
테스트 메서드가 실패하더라도 tearDown 호출하기
여러 개의 테스트 실행하기
수집된 결과를 출력하기
WasRun에 로그 문자열 남기기
실패한 테스트 보고하기
setUp 에러를 잡아서 보고하기
TestCase 클래스에서 TestSuite 생성하기

 

중복이 상당히 많은데, 주어진 테스트 클래스에 대한 테스트 슈트를 자동 생성할 방법이 있다면 그 중복을 제거할 수 있을 것이다.

그 전에 실패하는 테스트 3개를 고쳐야한다.

 

 

 

테스트 메서드 호출하기
먼저 setUp 호출하기
나중에 tearDown 호출하기
테스트 메서드가 실패하더라도 tearDown 호출하기
여러 개의 테스트 실행하기
수집된 결과를 출력하기
WasRun에 로그 문자열 남기기
실패한 테스트 보고하기
setUp 에러를 잡아서 보고하기
TestCase 클래스에서 TestSuite 생성하기

 

self 키워드가 반복되지만 객체 언어가 아니기 때문에 어쩔 수 없다고 저자는 말한다.

 

정리

  • TestSuite를 위한 테스트를 작성했다.
  • 테스트를 통과시키지 못한 채 일부만 구현하였다. 이것은 '규칙' 위반이다. 만약 그때 이걸 직접 발견했다면, 돈주머니에서 테스트케이스 두 개를 공짜로 가져가도 좋다. 테스트를 통과시키고 초록 막대상태에서 리펙토링할 수 있게 할 간단한 가짜 구현이 있을 것 같긴 한데, 지금은 그게 뭔지 잘 떠오르지 않는다.
  • 아이템과 아이템의 모음(컴포지트)이 동일하게 작동할 수 있도록 run 메서드의 인터페이스를 변경하였고 마침내 테스트를 통과시켰다.
  • 공통된 셋업 코드를 분리했다.
Comments