15

この場合は、特定のタイプの AutoFixture 標本ビルダーを作成していSystem.Data.DataSetます。ビルダーは、テスト用FakeDataSetにカスタマイズされたを返しDataSetます。

以下は、 aが要求されているdataSet場合でも、常に null を返すため、機能しません(プロパティにドリルダウンすることでわかります)。DataSetrequest

public class DataSetBuilder : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var dataSet = request as DataSet;
        if (dataSet == null)
        {
            return new NoSpecimen(request);
        }

        return new FakeDataSet();
    }
}

このバリエーションは機能しますが、複雑すぎるようです。同じことを達成するためのより良い方法があるように感じますが、何かが足りないだけです。

public class DataSetBuilder : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var seededRequest = request as SeededRequest;
        if (seededRequest == null)
        {
            return new NoSpecimen(request);
        }

        var requestType = seededRequest.Request as Type;
        if (requestType == null)
        {
            return new NoSpecimen(request);
        }

        if (requestType.Name != "DataSet")
        {
            return new NoSpecimen(request);
        }

        return new FakeDataSet();
    }
}
4

1 に答える 1

27

これを行う方が簡単です:

fixture.Register<DataSet>(() => new FakeDataSet());

ただし、SpecimenBuilder を使用する場合、これも機能するはずです。

public class DataSetBuilder : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var t = request as Type;
        if (typeof(DataSet).Equals(t))
            return new FakeDataSet();

        return new NoSpecimen(request);
    }
}

個人的には、最初のオプションを使用します。

于 2013-05-01T17:44:17.450 に答える