2012-08-08 3 views
1

나는 프로젝트의 일환으로 우리는 읽기 전용 DAO (Bill 클래스)를 가지고있다. 프로젝트 자체는 이미 데이터베이스에 표시되지 않은 Bill의 새 인스턴스를 생성해서는 안되며이 Bill 클래스의 값을 변경하거나 업데이트해서는 안됩니다. 그래서 Bill 인스턴스를 실수로 수정하는 것을 막기 위해 모든 생성자와 private은 setter가 없다. (Hibernate는 빌 인스턴스로 빌 데이터를 마샬링하고 public 생성자와 설정자가 없다는 이유로 방해받지 않는다.) 이제 질문에테스트 용으로 읽기 전용 DAO를 만들 때 가장 좋은 방법은 무엇입니까?

:

통합 테스트의 일환으로 나는 우리의 프로젝트는 데이터베이스에 표시되지 객체 새로운 법안을 만들 결코 것이라는 원칙을 위반해야합니다. 위 원칙을 위반하는 가장 좋은 방법은 무엇입니까?

반사 기반 빌더 : 내가 제시 한 하나 개의 아이디어는 빌 클래스의 코드를 변경하지 않아도되도록 반사 기반 빌더를 사용하고, 완전히 어떤 가정의 경우 테스트 빌더를하는 것입니다 빌더가 빌 클래스의 필드를 잘못 작성한 것을 신속하게 식별합니다.

패키지 - 개인 생성자 : 내 상사에 의해 제안 된 대안이 빌더가 사용할 수있는 패키지 개인 생성자를 포함하는 것입니다. 이것은 빌더가 작동한다는 것을 보증하기 위해 테스트가 더 간단하고 간단하다는 이점이 있습니다. 그러나이를 수용하기 위해서는 주 코드베이스에 명시적인 코드가 필요합니다.

우리 중 어느 누구도 두 아이디어에 매우 열중하지 않습니다. 그래서 다른 사람들이 이전에 비슷한 문제를 어떻게 다루 었는지, 어떻게 다루 었는지 궁금합니다. 저는 "민첩한 테스트 : 테스터와 민첩한 팀을위한 실용 가이드"를 통해 엄지 손가락을 봤습니다. 그러나 지금까지 어떤 관련성도 발견하지 못했습니다.

NB. 청구서가 DAO의 복잡한 계층 구조 (데이터베이스의 외래 키 제약 조건 포함)의 일부이기 때문에 데이터베이스와 직접 상호 작용하는 것만 큼 간단하지 않습니다. 따라서 이러한 계층 구조를 빠르고 간단하게 작성한 다음이 모든 데이터를 데이터베이스에 저장하는 것이 바람직합니다.

+0

"우발적 인 변경"에 대해 염려하고 있으니,'@ Immutable'을 알고 있어야합니다 : http://docs.jboss.org/hibernate/stable/annotations/reference/en/html /entity.html#entity-hibspecentity – david

답변

1

테스트 소스 트리에 보관되어 있고 Bill 클래스와 동일한 테이블에 매핑 된 MutableBill 클래스를 만들 수 있습니까?

그런 다음 테스트 코드는 불변 Bill을 계속 사용할 수 MutableBill를 사용하여 테스트 실행의 시작과 코드의 나머지 부분에 DB (예 : HSQLDB에) 채울 수 있습니다.

0

두 가지 중에서 선택해야한다면 기본 가시성 생성자를 사용합니다. 리플렉션 기반 프로그래밍은 이해하기 어렵고 전혀 직설적이지 않은 코드를 만듭니다. IDE의 찾기 참조가 제대로 작동하지 않으므로 누군가가 코드가 잘못되었다고 생각할 수 있습니다. 그런 다음 런타임에 모든 것이 깨졌습니다.

철저한 테스트가 더 바람직하기 때문에 이러한 추가 사항은 허용됩니다.