2009-03-31 2 views
2

만약 내가 다음과 같은 도메인 개체가 있습니다점검 방법 DDD/TDD 응용 프로그램의 지속성 계층

public class Customer 
{ 
    public virtual Guid Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual ISet<Order> Orders { get; set; } 

    public Customer() 
    { 
     Orders = new HashedSet<Order>(); 
    } 

    public virtual void AddOrder(Order order) 
    { 
     order.Customer = this; 
     Orders.Add(order); 
    } 
} 

다음 NHibernate에 맵핑 :이 테스트의 모든 값이

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Examples" assembly="Examples"> 
    <class name="Customer"> 
     <id name="Id"> 
     <generator class="guid.comb" /> 
     </id> 
     <property name="Name" length="50"/> 
     <set name="Orders" table="CustomerOrder" cascade="all-delete-orphan" lazy="true"> 
     <key column="CustomerId"/> 
     <many-to-many class="Order" column="OrderId"/> 
     </set> 
    </class> 
</hibernate-mapping> 

거기를?

사람들은 일반적으로 이러한 지속성 레이어를 테스트합니까? 각 필드가 개별적으로 유지되는지 확인하십시오. 나는 솔직히 최선의 관행이 이와 같은 것을위한 것인지 모르겠다. 긴 문자열과 부모/자식 관계로 테스트 할 수 있습니다.하지만 정수와 날짜는 어떻게됩니까? 이 과잉인가요?

저는 도메인 계층의 비즈니스 로직이 아니라 여기에있는 지속성 계층에 대해 이야기하고 있습니다. 이를 위해 저장소를 조롱했는데 여기서는 저장소에서 저장하라는 지시를 실제로 저장했음을 확인했습니다. 누군가가 필드를 매핑하는 것을 잊었거나 매핑에 가짜 문자열 길이가있는 경우 어떻게해야합니까?

.NET에서 이러한 종류의 테스트를 자동으로 생성하는 도구가 있습니까? 아니면 "나쁜"것인가?

답변

3

다른 세션에서 데이터를 저장하고 가져 오는 경우 효과적으로 매핑이 올바른지 확인할 수 있습니다. 이것이 값입니다.

메모리 데이터베이스와 다른 세션에서 데이터를 삽입하고 선택할 수있는 유창한 NHibernate의 PersistenceSpecification (여기에 대해서는 post)과 같은 용도로 사용하는 것이 가장 좋습니다.

0

이 테스트는 궁극적으로 사용자가 실제로 데이터베이스와 대화 할 수 있는지 확인하는 유일한 방법이므로 많은 가치가 있습니다. 작업 저장소가 있는지 확인한 후에 언급 한대로 다른 단위 테스트에서 호출을 저장소로 조롱 할 수 있습니다.

메모리 데이터베이스를 독점적으로 사용하는 것에주의하십시오. 대상 데이터베이스가 올바르게 작동하는지 알아야합니다. 또한이 테스트에서 세션 사용에주의해야합니다. 로드 할 때 실제로 데이터베이스에 도달하려면 저장 및 찾기가 다른 세션에서 수행되는지 확인하십시오.

적은 당신이 최대 유선 데이터베이스 테스트를 사용하여 확인할 수있는 것들 :

  • 경계 문자열
  • 게으른 로딩 길이. 분리 된 세션을 사용하여 열심히로드하고 싶지 않은 연결 객체에 대한 지연로드 예외를 가져 오는지 확인할 수 있습니다. 누군가가 실수로 오브젝트 그래프를 통해 탐색 경로를 추가하여 전체 데이터베이스가로드되는 경우보다 복잡한 도메인 계층 구조에서 중요합니다.
  • 외래 키 및 고유 제한 사항.
  • 큰 데이터 세트가있는 저장소에 대한 검색 호출의 효율성.
관련 문제