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);
    }
}

これを行うことで、ID が重要であるが注文が重要ではないテストで顧客を作成する必要がある場合、次のようにオブジェクトを作成できます。

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

これは良い考えですか?それとも、非プリミティブ プロパティがどのように構築されるべきかを想定するのが最善ではない理由はありますか?

4

1 に答える 1

6

これは良いアイデアで、Test Data Builderパターンとして知られています :)

FWIW、 AutoFixtureと呼ばれる汎用の Test Data Builder を作成しました。これにより、簡単に書くことができます

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

AutoFixture を使用すると、多くのカスタム テスト データ ビルダを作成して維持する必要はありませんが、それ以外の場合は、非常に価値のあることです。

于 2010-01-05T10:59:47.760 に答える