Должен ли конструктор тестовых данных создавать значения по умолчанию для непримитивов?
Я создал конструктор данных для создания тестовых данных в модульных тестах. Мои построители данных создают значения по умолчанию для всех свойств, так что тестам, использующим их, нужно только указать свойства, применимые к тесту.
Рассмотрим следующий конструктор:
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();
Это хорошая идея? Или есть есть ли какая-то причина, по которой не было бы лучше предположить, как должно быть построено непримитивное свойство?
1 ответ:
Это прекрасная идея и известна как конструктор тестовых данных шаблон:)
FWIW, я создал универсальный конструктор тестовых данных под названиемAutoFixture . Это позволит вам просто написать
var customer = new Fixture() .Build<Customer>() .With(c => c.Id, 99) .CreateAnonymous();
С помощью AutoFixture вам не нужно писать и поддерживать множество пользовательских построителей тестовых данных, но в остальном это очень стоящая вещь.