Ich schreibe einige Komponententests für eine Erweiterungsmethode, die ich auf IPrincipal
geschrieben habe. Zur Unterstützung, ich habe ein paar Hilfsklassen (ein Code für nicht-implementierten Mitglieder der Schnittstellen der Kürze halber weggelassen wurde) erstellt:Wie erstellen Sie einen Unit-Test-Stub für eine Schnittstelle mit einem schreibgeschützten Member?
public class IPrincipalStub : IPrincipal
{
private IIdentity identityStub = new IIdentityStub();
public IIdentity Identity
{
get { return identityStub; }
set { identityStub = value; }
}
}
public class IIdentityStub : IIdentity
{
public string Name { get; set; } // BZZZT!!!
}
jedoch die Name
Eigenschaft in der IIdentity
Schnittstelle ist schreibgeschützt (Die Schnittstelle IIDentity
gibt einen Getter, aber keinen Setter für die Name-Eigenschaft an.
Wie kann ich die Name-Eigenschaft in meinem Stub-Objekt für Testzwecke festlegen, wenn die Schnittstelle es als schreibgeschützte Eigenschaft definiert hat?
Konstruktor? "IIdentityStub" hat einen parametrisierten Konstruktor, der Name als Parameter akzeptiert. – shahkalpesh
Hat sich Ihr "BZZZT" auf einen Kompilierungsfehler bezogen? Ich konnte Ihr Beispiel problemlos kompilieren (mit Semikolons auf der Identity-Eigenschaft). – micahtan
@micahtan: Ja, aber wenn Sie versuchen, einen Test dagegen zu schreiben, und den Wert von 'Name' im Test setzen, wird der Compiler beschweren, dass' Name' schreibgeschützt ist, weil die 'Name' Eigenschaft in' IIDentity hat keinen definierten Setter. –