먼저 좋은 책 써주셔서 정말 감사합니다. TDD에 관해서 몰랐던 부분을 많이 배우는 것 같습니다. 제가 챕터 4까지 책을 보면
서 소스 코드 부분 오타를 찾아서 정리해 봤습니다. (http://www.hanb.co.kr/book/errata/
errata_view.html?isbn=978-89-7914-726-1 이곳 참조해서 겹치는건 제외 했습니다.)
p199 위쪽 소스코드, 맨 아래줄
userCoupon.getDiscountRate() -> lastCoupon.getName()
p220 IListener 인터페이스
뒷쪽 코드를 전부 반영한다고 할 때 다음 메소드가 추가되어야 합니다.
void documentChanged(String title);
int getDocumentSize(String title);
p223 가장 위쪽 소스코드
중간에 나와있는 에러가 맞다고 가정할 때
원래 소스코드:
documentBox.addDocument("Document", new byte[0]);
documentBox.addDocument("Document", new byte[0]);
documentBox.addDocument("Document", new byte[0]);
documentBox.addDocument("Document", new byte[0]);
수정된 소스코드:
documentBox.addDocument("Document", new byte[0]);
documentBox.documentChanged("Document");
documentBox.documentChanged("Document");
documentBox.documentChanged("Document");
p223 가장 아래 소스코드
아래 메소드 같은 경우, mock에서 호출할 때의 행동을 지정해 주지 않았습니다.
mockListener.documentInfo("Document");
만약 이 코드가 이런 코드였다고 생각해 봐도 mock 객체가 아닌데 호출해 주는게 이상해 보입니다.
documentBox.documentInfo("Document");
저는 이 코드를 삭제하고 DocumentBox.documentInfo() 메소드를 이렇게 구현했습니다.
public String documentInfo(String title) {
return title + ": " + listener.getDocumentSize(title);
}
p248 소스코드
testSound_NOISY() 메소드는 noise.sound() 메소드를 몇 번 호출했는지 테스트 하는데
NoiseChecker.checkDecibel() 메소드의 if-else 문으로 인해 한 번 호출되지 않습니다. 총 5번 호출됩
니다. 저는 다음과 같이 코드를 수정했습니다.
verify(noise).sound(); -> verify(noise, atLeast(1)).sound();
한 번 확인해 보세요~
p262 소스코드
본문 검은색 동그라미 2번 부분에 driver, URL만 들어갔는데 (아마 생략하신거 같지만) username,
password가 추가되어야 하지 않을까 싶습니다.
p268 소스코드
expected_seller.xml 코드에서 밑에 <item />은 빈 테이블을 만드는 걸로 알고 있는데 item이란 테이블을
책에서 만든적이 없으므로 삭제하는게 좋을 것 같습니다.
p290 Book 클래스 소스코드, p296 Player 클래스 소스코드
super(); 가 왜 있는지 잘 모르겠습니다.
p293 LENIENT_ORDER 소스코드, p295 아래쪽 소스코드 컬렉션의 순서가 다른 경우 부분
expected와 actual 순서가 바뀐 것 같습니다. (테스트 결과에 영향은 없습니다.)
p293 소스코드는 제 생각엔 assertReflectionEquals(myList, Arrays.asList(1, 2,
3), LENIENT_ORDER); 가 맞는 것 같고,
p295 소스코드는 assertLenientEquals(bag, Arrays.asList(300, 200, 100)); 이 맞
을 것 같습니다.
p303 @DataSet
테스트가 계속 실패합니다. 원인을 찾아보니 DbUnit 2.4.7과 Unitils-DbUnit-3.1 (현재 최신버전들) 사용
시 발생하는 에러인 것 같더라구요. PostgreSQL을 사용할 땐 테이블을 찾을 수 없다고 하고, MySQL 사용할 땐 결과
가 없다고 에러났습니다.
해결책은 이 곳(http://blog.javapia.co.kr/67)에서 찾았는데, DbUnit을 2.2.2 버전으로 낮추면
잘 돌아갑니다만 2.2.2 버전에 FlatXmlDataSetBuilder 클래스가 없어서 new
FlatXmlDataSet(File ...) ; 식으로 코드를 바꿔줘야 했습니다.
끝으로 사소한 거지만 p303 소스코드 클래스 이름이 RepositoryTest -> DatabaseRepositoryTest
수정됐는데 이건 오타인지 잘 모르겠습니다;
챕터 5, 6 보면서 찾은 소스 코드 오타입니다.