moq返回dataReader

时间:2011-09-30 14:29:30

标签: moq idatareader

我对moq / mocking有一种奇怪的体验。

我试图模拟进入方法的数据,这样我就不必在测试时提供数据库。

所以我加载了一些先前已经解散过的数据。 将其加载到dataTable中,然后从那里创建数据读取器,因为我的业务层方法需要数据读取器。

然后为我的数据层创建一个模拟。并将特定方法的返回值设置为我的新datareader。

然后我将我的模拟数据层设置(注入)到我的业务层,这样它可以在时间到来时完成返回数据的工作..

var dataTable = DataSerialisation.GetDataTable("C:\\data.xml");
IDataReader reader = dataTable.CreateDataReader();

var mock = new Mock<IRetailerDal>();
mock.Setup(x => x.ReadRetailerDetails("00")).Returns(reader);

retailersBusinessLayer.RetailerDal = mock.Object;

var r = retailersBusinessLayer.GetRetailerDetail("00");

现在..当调用“GetRetailerDetail”时,基本上会进入“while(data.Read())”并崩溃,但有时只会崩溃。 我得到了例外:

System.InvalidOperationException : DataTableReader is invalid for current DataTable 'Table1'.

Othertimes它移过那个并且可以读取一些列数据,但其他列不存在。 (必须与我的序列化方法有关)

1 个答案:

答案 0 :(得分:0)

嗯,这不是一个令人满意的答案,但代码现在可以运行..

它与此相似......因为没有找到理由。 here

无论如何...如上所述,问题出现在我的GetRetailerDetail方法中,其中代码命中而(data.Read())它会引发错误..

修复..更改数据读取器变量的名称..即它是“数据”,它现在是“data2”..这就是我所有的变化。