DrG*_*iff 13 nunit unit-testing sqldatareader stub stub-data-generation
我们有一个n层Web应用程序,可以从SQL Server中提取数据.我们的数据访问逻辑返回一个SqlDataReader,其数据随后用于创建我们的Business对象(也称为数据传输对象).
我们希望构建单元测试以检查我们的代码,这些代码解释这些SqlDataReader对象返回的数据以构建我们的Business对象.
因此,在单元测试期间,似乎需要构建存根来替换SqlDataReader对象.可能相当典型,我们的SqlDataReader对象通常返回多个记录集,每个记录集都有多行.
提前谢谢了
格里夫
Ste*_*kes 25
自动化测试基本上总是一个明智的尝试:)
能够对此进行测试的第一步是让您的数据访问逻辑返回IDataReader而不是SqlDataReader- SqlDataReader实现IDataReader,因此没有问题.
在单元测试中,您可以手动构建和填充DataTable对象,然后调用dataTable.CreateDataReader()以获取IDataReader传递给测试对象.
编辑
为了给测试提供一组样本数据,我建议为您使用的每个数据表使用ObjectMother,并在一个专用位置创建数据表.然后,您可以在每个ObjectMethod类上放置方法,以强类型方式更新某些数据.例如:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
...然后你可以像这样使用数据阅读器:
IDataReader customerDetailsReader = new PersonalDetailsBuilder()
.CreateNewTable()
.AddStandardData()
.AddRow(17, "Customer 17")
.ToDataReader();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3848 次 |
| 最近记录: |