在这种情况下,我正在为特定类型创建一个AutoFixture样本构建器System.Data.DataSet.构建器将返回a FakeDataSet,这是DataSet为测试而定制的.
以下不起作用,dataSet总是返回null,即使DataSet正在请求a(我可以通过钻取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();
}
}
Run Code Online (Sandbox Code Playgroud)
这种变化确实有效,但似乎过于复杂.感觉有更好的方法来完成同样的事情,我只是缺少一些东西.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ann 17
这样做会更简单:
fixture.Register<DataSet>(() => new FakeDataSet());
Run Code Online (Sandbox Code Playgroud)
但是如果你想使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会使用第一个选项.
| 归档时间: |
|
| 查看次数: |
2853 次 |
| 最近记录: |