티스토리 뷰
- 화폐 예제
- money.zip
- $5 + 10CHF = $10
설계의 완벽함보다 동작하는 코드가 우선이다.
- 우선 동작하는 코드를 작성한 뒤에 리팩토링을 통해 설계를 보완한다.
- TDD를 통해 잘 동작하는 깔끔한 코드를 작성하자.
- Unit Test (단위 테스트)
- unit
- 미국·영국 [|ju:nɪt] 영국식 다른 뜻(1건) 예문보기
- 1. 구성 단위 2. (상품의) 한 개 3. (특정 임무를 위한) 부대
- unit test란 단어대로 프로그램의 작은 부분(모듈) 하나를 테스트하는 것을 말한다.
- 주로 하나의 method(function)가 대상이 되며 사내에서는 Branch coverage를 적용
- test는 어떤 상황에서도 초록막대를 유지해야하기 때문에 외부 환경에 의존적인 코드는 지양하거나, 그에 대한 의존성을 제거한다.
- 의존성 제거를 위해서 Mock을 적용하기도 한다.
- 즉 unit test는 타겟 모듈만을 바라보며 정상적으로 작동하는지 확인하는 작업이다.
- unit test ==
- 클래스?
- 설계를 먼저 할 때는 클래스를 '잘' 추출하는게 문제였는데 TDD에서는 그렇지 않은 것 같다.
- 일단 객체 같은 녀석들은 모두 추려내 빠르게 개발하고 리팩토링을 통해 중복을 제거하고 필요하다면 추상화한다. (맞나?)
- 화폐 예제의 Dollar, Franc 클래스를 보자, 중복 코드들을 모두 Money 클래스로 추상화하고 결국엔 하는 일이 없어 폐기처분된다.
- 있으면 좋을 것 같은 테스트를 작성하라
- 그렇게 하지 않으면 이가 나빠진다. (p79)
- 테스트를 보다 더 견고하게 만들고 개발자에게 자신감을 줄 것 같다.
- assertTrue(sum instanceof Money); ???
- 다음은 교재 16장 말미에 있는 테스트다.테스트12345
@Test
public
void
testPlusSameCurrencyReturnsMoney()
throws
Exception {
Expression sum = Money.dollar(
1
).plus(Money.dollar(
1
));
assertTrue(sum
instanceof
Money);
}
- Expression의 구현체로 Sum, Money가 있는데 Money의 plus 메소드는 Sum 객체를 생성해서 반환한다.
- 그런데 이게 Money의 객체가 될 수 있는가??
- 테스트를 통과시키려면??
- 다음은 교재 16장 말미에 있는 테스트다.
'공부 > tdd' 카테고리의 다른 글
Spring 프레임워크의 도움을 받아 테스트하기 (프레임워크 의존성 제거) (0) | 2014.04.20 |
---|---|
xunit example 실습 (0) | 2014.04.18 |
3부 테스트 주도 개발 패턴 (0) | 2014.04.17 |
1주차 (0) | 2014.03.26 |
[TDD] Mock 객체 (0) | 2014.03.07 |
댓글