【发布时间】:2016-05-14 01:21:46
【问题描述】:
我是 Moq 的新手,我正在努力编写单元测试来测试将 SqlDataAdapter 转换为 System.DataView 的方法。这是我的方法:
private DataView ResolveDataReader(IDataReader dataReader)
{
DataTable table = new DataTable();
for (int count = 0; count < dataReader.FieldCount; count++)
{
DataColumn col = new DataColumn(dataReader.GetName(count),
dataReader.GetFieldType(count));
table.Columns.Add(col);
}
while (dataReader.Read())
{
DataRow dr = table.NewRow();
for (int i = 0; i < dataReader.FieldCount; i++)
{
dr[i] = dataReader.GetValue(dataReader.GetOrdinal(dataReader.GetName(i)));
}
table.Rows.Add(dr);
}
return table.DefaultView;
}
我正在尝试创建类似的东西:
var dataReaderMock = new Mock<IDataReader>();
var records = new Mock<IDataRecord>();
dataReaderMock.Setup(x => x.FieldCount).Returns(2);
dataReaderMock.Setup(x => x.Read()).Returns(() => records);
我想传递一些数据并验证它是否已转换。
谢谢。
【问题讨论】:
-
你有什么问题?
-
我无法用虚拟数据填充模拟对象。这不允许我测试我的方法中的逻辑。
-
ResolveDataReader方法是如何实现的?我需要看代码才能举个例子…… -
获取并创建列然后填充行。
-
用最小起订量来做这件事会很困难,并且会非常紧密地将您的测试与实施结合起来。如果您无法重构代码以将其分解,那么您最好编写一个手动存根类,该类实现 IDataReader 并从您可以在测试中配置的内部列表返回数据。
标签: c# unit-testing mocking moq idatareader