2011-09-30 73 views
0

我對moq/mocking有一種奇怪的體驗。moq返回dataReader

我試圖模擬數據進入一個方法,所以我不必在測試時間使用adatabase。

因此,我在之前seralised的某些數據中加載。 將其加載到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'. 

Othertimes它移動過去認爲,可以讀一些列的數據,但其他列不存在。 (必須用我的序列化方法做)

回答

0

嗯,這正是心不是一個滿意的答覆,但代碼工作現在..

其與此類似。在沒有任何理由被發現。 here

反正...上面的問題是我GetRetailerDetail方法,其中的代碼打而(data.Read())它拋出的錯誤..

的修復內部ocuring如說..更改數據讀取器變量的名稱..即它的「數據」和它現在的「數據2」..這就是我所有的變化。