本文介绍了嘲讽一个DataReader,并得到一个Rhino.Mocks.Exceptions.ExpectationViolationException:IDisposable.Dispose();预计#0,实际#1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图嘲弄一个SqlDataReader
I'm trying to mock a SqlDataReader
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的错误在我的方法
but I keep getting a Rhino.Mocks.Exceptions.ExpectationViolationException: IDisposable.Dispose(); Expected #0, Actual #1 error in my method
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);
}
}
}
我失去的东西吗?
am I missing something?
推荐答案
我将使用AAA的语法和使用接口(的IDataReader ),而不是具体类型(
SqlDataReader的
):
I will suggest you a rewrite of the test using AAA syntax and using an interface (IDataReader
) instead of concrete type (SqlDataReader
):
// Arrange
IDataReader reader = MockRepository.GenerateStub<IDataReader>();
reader.Stub(x => x.Read()).Repeat.Once().Return(true);
reader.Stub(x => x.Read()).Return(false);
reader.Stub(x => x["City"]).Return("Boise");
reader.Stub(x => x["State"]).Return("State");
reader.Stub(x => x["LAT"]).Return(100);
reader.Stub(x => x["LON"]).Return(-100);
// Act
var myCities = new List<CityState>();
using (reader)
{
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);
}
}
// Assert
Assert.AreEqual(1, myCities.Count);
Assert.AreEqual("Boise", myCities[0].City);
...
这篇关于嘲讽一个DataReader,并得到一个Rhino.Mocks.Exceptions.ExpectationViolationException:IDisposable.Dispose();预计#0,实际#1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!