c# – 模拟一个DataReader并获取Rhino.Mocks.Exceptions.Expecta
发布时间:2020-12-15 06:40:59 所属栏目:百科 来源:网络整理
导读:我试图模拟一个SqlDataReader SqlDataReader reader = mocks.CreateMockSqlDataReader(); Expect.Call(reader.Read()).Return(true).Repeat.Times(1); Expect.Call(reader.Read()).Return(false); Expect.Call(reader.HasRows).Return(true); Expect.Call(re
我试图模拟一个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错误 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); } } } 我错过了什么吗? 解决方法
我将建议您使用AAA语法和使用接口(IDataReader)而不是具体类型(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(),Lon = Convert.ToInt32(reader["LON"]) }; myCities.Add(myCity); } } // Assert Assert.AreEqual(1,myCities.Count); Assert.AreEqual("Boise",myCities[0].City); ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |