Sto cercando di prendere in giro uno SqlDataReaderMocking di un DataReader e acquisizione di Rhino.Mocks.Exceptions.ExpectationViolationException: IDisposable.Dispose(); Previsto # 0, # 1 Actual
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();
ma io continuo a ricevere un Rhino.Mocks.Exceptions.ExpectationViolationException: IDisposable.Dispose(); Atteso n. 0, errore effettivo n. 1 nel mio metodo
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);
}
}
}
Mi manca qualcosa?
presumo che da quando questa risposta è stata accettata, deve essere risolto il problema. Ma la domanda rimane: perché ha funzionato? Ho lo stesso problema con IDisposable (sto cercando di deridere System.IO.Stream), e non riesco a capire perché il mio Dispose() non viene chiamato. –
Funziona perché abbiamo sostituito 'SqlDataReader' con' IDataReader' e preso in giro questo 'IDataReader'. Nel tuo caso sembra che tu stia lavorando con una classe astratta invece di un'interfaccia. In questo caso è necessario creare l'oggetto mocked con 'MockRepository.GeneratePartialMock()' e definito le aspettative su di esso usando 'streamMock.Expect (x => x.Dispose()). Throw (new Exception (" foo ")) ; '. –
Esegue questo esempio sul computer dopo aver aggiunto un'implementazione per CityState? In caso contrario, potresti fornire il codice completo in modo che venga eseguito? Non fa per me con Moq 4.0.10827 anche dopo aver usato var reader = new Mock() e reader.Setup (...). –
Lernkurve