我正在为特定类型创建一个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();
}
}
答案 0 :(得分:17)
这样做会更简单:
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);
}
}
就个人而言,我会使用第一个选项。