2016-12-22 1 views
1

Einstellung habe ich eine Schnittstelle wie dieseeine Nur-Lese-Eigenschaft einer Klasse für Unit-Tests

public interface IConnection 
{ 
    Strategy Gc { get; } 

    bool IsConnected(); 

    bool Connect(); 
} 

ich Unit-Test-Methoden einer Klasse wollen, die diese Schnittstelle verwendet. Jetzt möchte ich Gc setzen, aber es passiert nur readonly. Gibt es eine Möglichkeit, das Gc-Feld festzulegen, ohne Änderungen an dieser Schnittstellenklasse vorzunehmen? Ich benutze MS-Fälschungen und Nsubstitute für Komponententests. Jedoch bietet anscheinend keine eine Lösung. PrivateObject funktioniert auch nicht.

Ändern der Schnittstelle ist keine Option. Schlage bessere Lösungen vor.

Antwort

8

Mit NSubstitute ist es ziemlich einfach. Zuerst ein Modell für Ihre Schnittstelle erstellen:

var mock = Substitute.For<IConnection>(); 

Jetzt können Sie das Mitglied Mock mit einem Rückkehr-Typ für die Eigenschaft festlegen:

mock.Gc.Returns(Substitute.For<Strategy>()); 

schließlich, dass verspottet Instanz als Parameter zur Verfügung stellen, um den Service je nach diese Instanz, zum Beispiel:

var target = new MyClassToTest(); 
target.DoSomething(mock); // mock is an instance of IConnection 

Nun, wenn Ihre Methode wird aufgerufen, eine Dumm-Instanz für Strategy zurückgibt. Natürlich können Sie auch einen beliebigen anderen Rückgabetyp innerhalb der Returns -Anweisung setzen. Werfen Sie einen Blick auf http://nsubstitute.github.io/help/set-return-value für weitere Informationen.

+1

Es hat funktioniert, danke. Ich kratze meinen Kopf, wie um alles in der Welt habe ich das nicht versucht. –

Verwandte Themen