为一个类型创建一个AutoFixture样本生成器

本文关键字:一个 样本 类型 创建 AutoFixture | 更新日期: 2023-09-27 18:11:37

我正在为特定类型创建一个AutoFixture标本生成器,在本例中为System.Data.DataSet。构建器将返回一个FakeDataSet,这是一个用于测试的定制DataSet

下面不起作用,dataSet总是返回null,即使在请求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();
    }
}

为一个类型创建一个AutoFixture样本生成器

这样做会更简单:

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

,但如果你想要使用一个标本生成器,这也应该工作:

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

我个人会使用第一个选项