为一个类型创建一个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();
}
}
这样做会更简单:
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);
}
}
我个人会使用第一个选项