2012-05-21 3 views
0

NHibernate 3을 사용하는 프로젝트에서 일하고있다. 그러나 코드는 꽤 난잡하다. 내가 뭘하고 싶은 것입니다 :NHibernate와 저장소 패턴 사용하기 - 문맥과 필터 표현을 조롱하는 법을 다루는 방법

  • 이 프로젝트에
  • 소개 저장소 패턴을 테스트 코드를 소개합니다 - 나는 엔티티 프레임 워크 4 프로젝트를했고, 나는 관계없이 스토리지, 쿼리를 테스트하기 위해, 특히 기회를 그것을 즐겼다 사용 (내부 저장소를 모의하고 객체 목록과 같은 메모리 내 구현을 주입 할 수 있습니다.) 현재 DAO 코드가 CreateCriteria 메소드와 작동하며 NHibernate와 관련된 쿼리를 작성하기 때문에 NHibernate 저장 영역을 다른 것으로 (적어도 적어도 목록 인스턴스에 NHibernate.ICriteria를 실행하는 방법을 모르겠다. 그래서 저장소 구현에 상관없이 사용할 수있는 쿼리를 만드는 방법이 필요하다. ation.

어떤 방법으로 달성 할 수 있습니까?

답변

0

아마도 당신이 찾고있는 것이 정확하지 않을 수 있습니다. 우리는 두 종류의 테스트를 가지고 있습니다 : 단위 테스트는 데이터베이스없이 순수 로직을 테스트하고 데이터베이스 통합 테스트입니다.

단위

우리는 쿼리를 구현하는 클래스의 인터페이스를 테스트합니다. 이런 방식으로, 도메인은 Hibernate에 대한 참조를 가지지 않는다. 귀하의 경우, 이것은 아마도 저장소 일 것입니다. 간단하고 작은 인터페이스를 작성하고 전체 저장소를 조롱하십시오. 당신은 이것을 위해 NHibernate조차 필요하지 않습니다. 그것은 persistence ignorance의 아름다움입니다.

데이터베이스 통합 우리는 in memorySqlite database에 자 NHibernate를 실행하는

을 테스트합니다. 이 방식으로 NHibernate에 의존하는 매핑, 쿼리 및 다른 것들을 테스트하고 있습니다.

+0

단위 테스트와 관련이 있습니다. 당신이 쓴 것은 조롱 된 저장소 호출의 결과를 조롱하는 것입니다 - 예를 들어 FindByCity ('Chicago')는 10 개 도시를 반환합니다. 그러나 내가 성취하고자하는 것은 복잡한 쿼리가 정확하게 처리되는지 테스트하는 것입니다. 예를 들어 FindBy (new QueryByCity ('Chicago'))는 10 개 도시를 반환합니다. 올바르게 구현 된 쿼리를 확인하기 위해 내부 컨텍스트/메모리 저장 공간을 모의하고 싶습니다 (예 : 20 개 도시). 리포지토리는 쿼리를 적용합니다. 실제로 쿼리와 일치하는 도시를 반환합니다. – dragonfly

+1

흠, 실제로, 다시 한 번 읽은 후, 내가하고있는 일은 데이터베이스 통합 테스트 인 것 같습니다. 그게 맞습니까? – dragonfly

+0

@dragonfly : 예, 데이터베이스 통합 테스트입니다. 데이터베이스, NH, 데이터 등 모든 것이 필요하지만 모든 종류의 쿼리, 심지어 표준 SQL에서도 작동합니다. –