Używam RhinoMocks, próbuję rozszerzyć wartość gettera właściwości. Właściwość jest zdefiniowana jako część interfejsu z dostępem tylko do gettera.Stubbingowanie właściwości za pomocą Rhino Mocks
Jednak pojawia się błąd "Nieprawidłowe połączenie, ostatnie połączenie zostało użyte lub nie zostało wykonane żadne połączenie (upewnij się, że wywołujesz metodę wirtualną (C#)/Overridable (VB))." Rozumiem, że może to oznaczać, że posiadana przeze mnie nieruchomość nie jest wirtualna; Jednak jest to część interfejsu i nie jestem pewien, czy to jest powód, dla którego dostaję ten błąd ..
Poniżej znajduje się szkielet kodu. Jeśli odkomentuję wiersz, który mówi "stubRepository.Stub (x => x.StoreDeviceID) .PropertyBehavior();", wtedy pojawia się nowy błąd "Właściwość musi być odczytana/zapisana". Szukałem na SO i znalazłem stronę this. Ale proponowane rozwiązanie mi nie pomaga. jakieś pomysły?
public interface IStore {
string StoreDeviceID {get;}
//other methods
}
public static class Store {
private IStore Repository;
public void SetRepository(IStore rep){
Repository = rep;
}
public StoredeviceID {
get{
return Repository.StoreDeviceID;
}
}
//other methods
}
public class TestClass {
[Test]
public void TestDeviceID() {
var stubRepository =
MockRepository.GenerateStub<IStore>();
Store.SetRepository(stubRepository);
//stubRepository.Stub(x => x.StoreDeviceID).PropertyBehavior();
SetupResult.For(stubRepository.StoreDeviceID).Return("test");
Assert.AreSame(Store.StoreDeviceID, "test");
}
}
@ Adam, Ponieważ właściwość jest tylko do odczytu, nie mogę jej ustawić. Jednak fragment kodu, który podałeś pod tym adresem, działa doskonale. Silly me, wypróbowałem wszystkie inne opcje oprócz tego :) – Santhosh
StoreDeviceID nie ma ustawiacza, więc twoja pierwsza instrukcja 'stubRepository.StoreDeviceID =" test ";' nie zadziała. –
Ahh - przepraszam. Zaktualizuję odpowiedź - cieszę się, że udało ci się. –