2010-01-05 1 views
2

단위 테스트에서 테스트 데이터를 작성하기 위해 데이터 빌더를 만들었습니다. 내 데이터 빌더는 모든 특성에 대한 기본값을 작성하여 사용하는 테스트가 테스트에 적용 할 수있는 특성 만 지정하면됩니다. 다음과 같이 내가 개체를 만들 수 있습니다 나는 ID가 나에게 중요하는 시험에서 고객을 만들 필요가 있다면, 이렇게테스트 데이터 빌더가 비 프리미티브 (non-primitives)의 기본값을 구성해야합니까?

public class CustomerBuilder 
{ 
    public int id = 0; 
    public Order order = new OrderBuilder().Build(); 

    public CustomerBuilder WithId(int id) 
    { 
     this.id = id; 
     return this; 
    } 

    public CustomerBuilder WithOrder(Order order) 
    { 
     this.order = order; 
     return this; 
    } 

    public Customer Build() 
    { 
     return new Customer(id, order); 
    } 
} 

하지만 주문은 무관하다 :

는 다음 빌더를 고려 :

Customer c = new CustomerBuilder() 
        .WithId(99) 
        .Build(); 

이 것이 좋나요? 또는 비 기본 속성을 어떻게 구성해야하는지 가정하는 것이 최선이 아닌 이유가 있습니까?

답변

6

이것은 좋은 생각과 Test Data Builder 패턴 :

FWIW로 알려져있다, 나는 테스트 데이터 빌더 AutoFixture라는 범용을 만들었습니다. 이것은 단순히 당신이 작성하고 사용자 정의 테스트 데이터 빌더를 많이 유지 할 필요가 없습니다 AutoFixture를 사용하여

var customer = new Fixture() 
    .Build<Customer>() 
    .With(c => c.Id, 99) 
    .CreateAnonymous(); 

를 작성할 수 있도록 것이지만, 그렇지 않은 경우는 할 수있는 매우 가치있는 일이다.

관련 문제