-
Test Driven Development By Example 2부 정리기타/북스터디 2022. 6. 4. 00:07
xUnit 예시
- 테스트를 위한 도구 구현하기
1. xUnit으로 가는 첫걸음
- 첫 번째 작은 단계는 아직 프레임워크가 없기때문에 테스트 케이스를 수동으로 검증하자.
두 번째는 테스트 프레임워크에 대한 할 일 목록 정리하기.테스트 메서드 호출하기setUp 호출하기
나중에 tearDwon 호출하기
테스트 메서드가 실패하더라도 tearDown 호출하기
수집된 결과를 출력하기- 클래스를 정의하기 전에 테스트 코드부터 작성하기
- 테스트 코드가 초록 막대가 뜨게 클래스와 메서드를 정의하고 리팩토링 진행하기
- 리팩토링의 일반적인 패턴
- 하나의 특별한 사례에 대해서만 작동하는 코드를 가져다가 다른 여러 사례에 대해서도 작동할 수 있도록 상수를 변수로 변화시켜 일반화하는 것
질문
- p.161: 자기참조 프로그래밍이 뭐지?
- p.164: 왜 테스트 메서드를 직접 호출하는 대신 진짜 인터페이스인 run()메서드를 사용하는 것이지?
- p.164: 두 부분을 서로 분리하여 각각에 따로 작업할 수 있다에서 말한 두 부분이 run과 testMethod를 의미하는 것인가?
용어정리
- 부트스트랩이란 In computers, the word bootstrap means to boot: to load a program into a computer using a much smaller initial program to load in the desired program (which is usually an operating system)
- 플러거블 셀렉터(pluggable selector)란 Replace subclasses with dynamically generated method calls. 장점은 객체 별로 서로다른 메서드가 동적으로 호출되게 함으로써 필요 없는 하위클래스의 생성을 피한다. (run메서드를 의미하는 듯)
2. 테이블 차리기
- 테스트를 작성하다보면 공통된 패턴을 발견하게 될 것임.
- 준비(arrange): 객체를 생성
- 행동(act): 어떠한 자극을 준다.
- 확인(assert): 결과를 검사한다.
- 위 패턴이 서로 다은 스케일에서 반복된다면 테스트를 위해 새로운 객체를 얼마나 자주 생성해야 하는가하는 문제에 직면하게 되고 두 가지 제약이 상충함
- 성능: 테스트가 최대한 빨리 실행되길 원하고 여러 테스트에서 같은 객체를 사용하면 객체를 하나만 생성해서 공용적으로 사용하면 됨
- 격리: 한 테스트에서의 성공이나 실패가 다른 테스트에 영향을 주지 않기를 원함
질문
- p.173: testSetUp(self)에서 첫 번째 선언문 self.test.setUp()이여야하는 것아닌가?
3. 뒷정리하기
- 종종 setUp()에서 외부 자원을 할당하는 경우가 있고 테스트가 계속 서로 독립적이길 원한다면 tearDown()메서드 같은 곳에서 자원을 다시 반환할 필요가 있음
질문
- p.176: testSetUp(self)에서 첫 번째 선언문 self.test.setUp()이여야하는 것아닌가?
- 파이썬 이해도가 낮아 코드를 이해하기 어렵다...
4. 셈하기 ~ 5. 실패 처리하기
- 테스트가 작동하도록 하려면 예외를 잡아야하고 현재까지의 구현에서는 예외가 보고되지 않기 때문에 이를 위한 작업 진행.
- 테스트 결과를 반환해주는 클래스를 만들고 n개 성공 n개 실패라는 결과문을 봔환해줌.
6. 얼마나 달콤한지
- 어떠한 것을 하고 싶은지는 알겠는데 내용을 이해하기 어려움
- testSuite메서드에서 왜 2run, 1failed일까? 1 run, 1 failed아닌가?
- 코드의 중복성 제거를 위해 하나의 메서드로 여러 테스트를 돌리는 testSuite를 만들었지만 코드 가독성은 떨어졌다.
용어정리
- 컴포지트 패턴이란
- 매개변수 수집(collecting parameter)란
'기타 > 북스터디' 카테고리의 다른 글
[디자인패턴] 커맨드패턴 (0) 2022.12.25 [이펙티브 자바] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) 2022.12.12 [디자인패턴] 데코레이터 패턴 (0) 2022.12.11 [디자인패턴] 전략 패턴 (0) 2022.07.10 [객체지향의 사실과 오해] 2주차 정리 (3~4장) (0) 2022.04.01