2009-01-02 9 views
8

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

In einigen Fällen muss ich den WCF-Dienst verspotten, da das gewünschte Verhalten vom Dienst manchmal schwierig ist (z. B. Service löst spezielle Ausnahmen aus).

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

Gibt es eine einfache Möglichkeit, einen WCF-Dienst nachzuahmen? Einfacher als eine andere Schnittstellenschicht zu erstellen und jeden einzelnen WCF-Aufruf umzuleiten?

Edit: Die meisten Antworten scheinen nicht viel über WCF-Dienst zu wissen, verwendet wird, so einige Klarstellung:
Um einen WCF-Dienst von einem Ansichtsmodell zu verwenden, ich habe die Verbindung, so etwas verwalten:

ChannelFactory<IMyWcfService> channelFactory = new ChannelFactory<IMyWcfService>(""); 
IMyWcfService proxy = channelFactory.CreateChannel(); 
proxy.CallMyStuff(); 
proxy.Close(); 

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.

Antwort

9

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

Wenn Sie in der Lage sein müssen, neue Instanzen im laufenden Betrieb zu erstellen, verwenden Sie die Factory, um die 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.

+0

+1 auf die Schnittstellen direkt verspotten. –

+0

bitte ein Beispiel angeben – PositiveGuy

+0

Was ist die ChannelFactory? – PositiveGuy

2

Sie können jedes Mock Framework wie RhinoMocks oder NMock verwenden, um den Schnittstellenvertrag zu überspielen. Wenn Ihr Service also IMyService implementiert hat, können Sie ein Mock Framework verwenden, um die Methodenaufrufe für diese Schnittstelle festzulegen. 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 Art und Weise werden die Methoden aufgerufen, wenn sie auf Ihrem Stand-in-Objekt aufgerufen werden, und Sie können Ihren Stand-in zurückgeben, was immer Sie wollen.

+0

Mit RhinoMock/NMock Ich müsste die Verbindung zum WCF-Dienst öffnen, übergeben Sie den Proxy zum ViewModel und schließen Sie es nach der Verwendung. Da WCF-Verbindungen normalerweise eine kurze Zeitüberschreitung aufweisen und für jede Transaktion geöffnet und geschlossen werden sollten, ist dies ein No-Go. – Sam

+0

Mit anderen Worten: Sie können RhinoMock/NMock nicht zum Mocking einer WCF-Schnittstelle verwenden. Zumindest nicht, dass ich weiß, wenn Sie einen Weg kennen, teilen Sie es bitte. – Sam

Verwandte Themen