Einfache Möglichkeit, einen WCF-Dienst nachzuahmen?

8

Ich habe eine App, die einen WCF-Dienst verwendet. Jetzt möchte ich Unit-Tests zur App hinzufügen.

In einigen Fällen muss ich mich über den WCF-Dienst lustig machen, da es manchmal schwierig ist, das gewünschte Verhalten vom Dienst zu erhalten (z. B. Dienst löst spezielle Ausnahmen aus).

Ich könnte dem WCF-Client noch eine weitere Schnittstelle hinzufügen, aber das scheint etwas albern, da die Client-Aufrufe bereits eine Schnittstelle verwenden.

Gibt es eine einfache Möglichkeit, einen WCF-Dienst nachzuahmen? Einfacher als das Erstellen einer anderen Schnittstellenschicht und das Umleiten jedes einzelnen WCF-Aufrufs darin?

Bearbeiten: Die meisten Antworten scheinen nicht viel über den WCF-Service zu wissen, also einige Klarstellungen:
Um einen WCF-Service von einem ViewModel aus zu verwenden, muss ich die Verbindung so verwalten:

%Vor%

Ich kann nicht einfach das ViewModel den Proxy an die WCF übergeben, da die Verbindung für jede Transaktion geöffnet und geschlossen werden muss. Aus diesem Grund würde die Verwendung von RhinoMock / NMock nicht funktionieren, da sie ein ViewModel benötigen, das den Proxy als Parameter erhält, was bei Verwendung von WCF nicht möglich ist.

    
Sam 02.01.2009, 14:45
quelle

2 Antworten

9

Warum können Sie nicht so etwas wie NMock2 verwenden, um die IMyWcfService -Schnittstellen direkt zu spielen?

Wenn Sie in der Lage sein müssen, neue Instanzen im laufenden Betrieb zu erstellen, verwenden Sie die Factory, um ChannelFactory<IMyWcfService> vom Client auszublenden. Auf diese Weise können Sie die Factory ersetzen, indem Sie dem Client einen Mock anstelle von echten Proxies bereitstellen.

    
David Schmitt 02.01.2009, 16:05
quelle
2

Sie können jedes spöttische Framework wie RhinoMocks oder NMock verwenden, um den Interface-Vertrag auszutricksen. Wenn also Ihr Service IMyService implementiert hat, könnten Sie ein Mocking-Framework verwenden, um Erwartungen über die Methodenaufrufe an dieser Schnittstelle zu stellen. Wenn Sie mit diesem Konzept nicht vertraut sind, können Sie einfach ein Stand-in-Objekt erstellen, das IMyService implementiert, aber während Ihres Tests vorgibt, der eigentliche Dienst zu sein. Auf diese Weise werden die Methoden aufgerufen, wenn sie aufgerufen werden, und Sie können Ihr Stand-in-Objekt zurückgeben, was auch immer Sie wollen.

    
Michael Mann 09.01.2009 06:07
quelle

Tags und Links