Ich teste einen MVC-Controller, der auf einem Wert beruht, der von einer schreibgeschützten Eigenschaft der Basisklasse zurückgegeben wird.Ersetze schreibgeschützte Eigenschaft in teilweise verspottetem Objekt
Der Getter für diese Eigenschaft löst eine Ausnahme aus, wenn es aufgerufen wird, da es sich auf eine HttpContext
(und andere böse Sachen) verlässt, die ich lieber vermeiden würde zu spotten.
Das ist, was ich bisher versucht habe:
controller = Substitute.ForPartsOf<MyController>(
Substitute.For<SomeDependency>(),
);
controller.UserInfo.Returns(new UserInfo());
Dennoch wirft diese eine Ausnahme, sobald Userinfo zugegriffen wird.
Eigentum auf Basisklasse:
public UserInfo UserInfo
{
get
{
// HttpContext dependent stuff
}
}
Ich habe versucht, die Basisklasse-Eigenschaft auf virtuelle Umgebung, aber dann bekomme ich eine Proxy-Ausnahme Castle.
Können Sie eine Abhängigkeit zu 'MyController' hinzufügen, die auf' UserInfo' und verwandte Sachen zugreift? Geben Sie zur Testzeit einen 'FakeUserInfoProvider' ein und verwenden Sie zur Laufzeit einen' HttpContextUserInfoProvider'? –