2013-07-11 3 views
0

나는 두 클래스, ParserItem을 가지고 있습니다. Parser 클래스는 구조화 된 문서를 파싱하고 Parser::GetItem(int some_id)과 같은 것을 호출하면 Item -objects를 반환합니다. Item 클래스는 "Tell - do not ask"원칙을 염두에두고 작성되었습니다. 그 말은 건설 중 Parser으로 채워진 몇 가지 내부 변수에 대한 getter-methods가 없다는 의미입니다.'tell-dont-ask'객체를 반환하는 파서를 단위 테스트하는 법?

질문은 다음과 같습니다 : Parser 클래스를 unittest하려면 어떻게해야합니까? 내부 Item 변수가 올바르게 구문 분석되었는지 확인하는 방법? 수업을 재정렬해야합니까? parser-interface가 객체 들인 Item을 완벽하게 반환한다는 것은 나쁜 설계일까요?

답변

1

디자인 은 이상적이지는 않지만 코드를 보지 않고서는 알기가 어렵습니다.

Parser가 너무 많은 정보를 숨기고 결과적으로 너무 많이하는 것은 스스로에게 묻는 것입니다.

마이클 페더 (Mike Feather)에서이 프레젠테이션을보실 것을 강력히 권장합니다.이 페인터에서는 (재미있게) 테스트를 사용하여 파서의 디자인을 개선하는 방법에 대해 설명하고 자신이 시도하는 것과 비슷한 문제를 보이는 것처럼 보입니다. 해결하다. Michael Feathers - the deep synergy between testability and good design

+0

이제 파서를 두 개의 클래스로 분할했습니다. 실제 구문 분석기. 문자열 만 struct에 저장하고 항목 작성기 클래스. 나중에 구문 분석기에서 필요한 구조를 가져오고 문자열을 숫자로 변환하는 것과 같은 모든 변환 및 검사 작업을 수행합니다. 이제 구문 분석기가 문서에서 올바른 정보를 추출하는지 확인할 수 있습니다. 그러나 항목 빌더의 모든 변환이 제대로 작동하는지 확인할 수 없기 때문에 문제가 남아 있습니다. 필자는 아이템 빌더의 기능을 최소화하고 가능한 한 테스트 가능한 헬퍼 클래스로 스왑 아웃해야한다고 생각합니다. – lslah

+0

답변 해 주셔서 감사합니다. 제 파서가 너무 크다는 중요한 포인트를 쳤다고 생각합니다. 또한 링크에 대해 감사드립니다. 나는 나중에 보게 될거야. – lslah

관련 문제