我对moq/mocking有一个奇怪的体验。
我试图模拟数据进入一个方法,这样我就不必在测试时有数据库可用。
所以我加载了一些以前序列化的数据。将它加载到一个dataTable中,然后从那里创建一个数据阅读器,因为我的业务层方法需要一个数据阅读器。
然后为我的数据层创建一个模拟。并将特定方法的返回值设置为我的新数据阅读器。然后我将模拟数据层设置(注入)到业务层中,以便它可以在时间到来时完成返回数据的工作。
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'.
其他时候,它可以读取一些列的数据,但其他列不存在。(这必须与我的序列化方法有关)
好吧,这不是一个令人满意的答案,但是代码现在可以工作了…
与此类似…在那里面找不到理由。
无论如何……如上所述,问题发生在我的GetRetailerDetail方法中,其中代码击中而(data.Read())它抛出错误…
修复. .更改数据读取器变量的名称。也就是说,以前是"data",现在是"data2"。