11
我試圖嘲弄一個SqlDataReader模擬DataReader並獲取Rhino.Mocks.Exceptions.ExpectationViolationException:IDisposable.Dispose();預計#0,實際#1
SqlDataReader reader = mocks.CreateMock<SqlDataReader>();
Expect.Call(reader.Read()).Return(true).Repeat.Times(1);
Expect.Call(reader.Read()).Return(false);
Expect.Call(reader.HasRows).Return(true);
Expect.Call(reader.Dispose);
Expect.Call(reader["City"]).Return("Boise");
Expect.Call(reader["State"]).Return("State");
Expect.Call(reader["LAT"]).Return(100);
Expect.Call(reader["LON"]).Return(-100);
mocks.ReplayAll();
,但我不斷收到一個Rhino.Mocks.Exceptions.ExpectationViolationException:IDisposable.Dispose();預期#0,我方法中的實際#1錯誤
using (reader)
{
if (reader.HasRows)
{
while (reader.Read())
{
CityState myCity = new CityState
{
City = reader["City"].ToString(),
State = reader["State"].ToString(),
Lat = Convert.ToInt32(reader["LAT"]),
Lon = Convert.ToInt32(reader["LON"])
};
myCities.Add(myCity);
}
}
}
我錯過了什麼?
我認爲,因爲這個答案被接受,它必須解決問題。但問題依然存在:爲什麼它有效?我有與IDisposable相同的問題(我試圖嘲笑System.IO.Stream),我無法弄清楚爲什麼我的存根Dispose()沒有被調用。 – 2010-09-26 02:33:57
它的工作原理是因爲我們用'IDataReader'替換了'SqlDataReader'並嘲笑了這個'IDataReader'。在你的情況下,似乎你正在使用抽象類而不是接口。在這種情況下,您需要使用'MockRepository.GeneratePartialMock()'創建模擬對象,並使用'streamMock.Expect(x => x.Dispose())定義期望。拋出(new exception(「foo」)) ;'。 –
2010-09-26 09:17:05
一旦爲CityState添加實現,此示例是否會在您的機器上運行?如果不是,你能提供完整的代碼嗎?即使在使用var reader = new Mock()和reader.Setup(...)之後,它也不適合我使用Moq 4.0.10827。 –
Lernkurve
2011-01-12 13:20:24