Создание построителя образцов AutoFixture для типа

Я создаю построитель образцов AutoFixture для определенного типа, в данном случае System.Data.DataSet. Строитель вернет FakeDataSet, который является настроенным DataSet для тестирования.

Не работает работа с DataSet, всегда возвращающая нуль, даже когда запрашивается a DataSet (я могу сказать, свернув в свойства request).

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

Ответ 1

Было бы проще сделать это:

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

Лично я бы использовал первый вариант.