Должен ли построитель тестовых данных строить значения по умолчанию для своих не примитивов? - PullRequest
2 голосов
/ 05 января 2010

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

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

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 Ответ

6 голосов
/ 05 января 2010

Это хорошая идея, известная как Test Data Builder pattern:)

FWIW, я создал универсальный построитель тестовых данных под названием AutoFixture . Это позволит вам просто написать

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

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

...