自动化测试基本上总是一个明智的努力:)
你的第一步能够测试,这是有数据访问逻辑回归一个IDataReader
而不是SqlDataReader
- SqlDataReader
实现IDataReader
,所以没有问题。
在你的单元测试,那么你可以手动生成并填充DataTable
对象,并调用dataTable.CreateDataReader()
得到一个IDataReader
通入被测物。
编辑
要为您的测试用样本数据集,我建议使用ObjectMother您所使用的每个数据表,保持数据表中创建一个专用的地方。然后,您可以在每个类上使用方法以强类型方式更新某些数据。例如:
public class PersonalDetailsBuilder
{
private DataTable _dataTable;
public PersonalDetailsBuilder CreateNewTable()
{
this._dataTable = new DataTable("CustomerPersonalDetails")
{
Columns = new[]
{
new DataColumn("CustomerId", typeof(int)),
new DataColumn("CustomerName", typeof(string))
}
};
return this;
}
public PersonalDetailsBuilder AddStandardData(int numberOfRows = 3)
{
foreach (int i in Enumerable.Range(1, numberOfRows + 1))
{
this.AddRow(i, "Customer " + i);
}
return this;
}
public PersonalDetailsBuilder AddRow(int customerId, string customerName)
{
this._dataTable.Rows.Add(customerId, customerName);
return this;
}
public IDataReader ToDataReader()
{
return this._dataTable.CreateDataReader();
}
}
...然后你可以使用这样得到的数据读取器:
IDataReader customerDetailsReader = new PersonalDetailsBuilder()
.CreateNewTable()
.AddStandardData()
.AddRow(17, "Customer 17")
.ToDataReader();
试想一下,我们的IDataReader的对象之一返回有关客户的详细信息:RS1 =个人信息; rs2 =权限; rs3 - xxx等。大多数测试将使用它作为默认数据集。一些测试可能希望使用大部分这些值,但是会覆盖数据表中的一些属性。那有多容易?几乎就像继承...... – DrGriff 2012-03-29 05:58:55
我不确定我是否理解 - 您是指多个结果集或一组数据读取器的单个数据读取器?无论如何,我已经更新了我的答案。 – 2012-03-29 10:13:43
为什么downvote?任何人...? – 2016-11-29 13:33:21