2010-01-05 8 views
2

Я создал построитель данных для создания тестовых данных в своих модульных тестах. Мои сборщики данных создают значения по умолчанию для всех свойств, поэтому для тестов, которые их используют, нужно указать только те свойства, которые применимы к тесту.Должен ли построитель тестовых данных строить значения по умолчанию для своих непримитивов?

Рассмотрим следующий конструктор:

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, я создал общее назначение Test Data Builder под названием AutoFixture. Это позволит вам просто написать

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

С помощью AutoFixture вам не нужно писать и поддерживать много пользовательских испытания строителей данных, но в остальном это очень стоящая вещь сделать.