Empfohlene Muster für Unit-Testing-Web-Services

8

Wir beginnen mit der Entwicklung eines serviceorientierten Frameworks (SOA), das sicherlich eine große Anzahl granularer Web-Services (REST in WCF) beinhalten wird. Wir waren ziemlich diszipliniert in der Unit-Prüfung unserer client- und serverseitigen Codebasis, haben jedoch wenig Erfahrung mit Unit-Testing-Webdiensten. Wir suchen wirklich nach einer Anleitung, wo die Tests geschrieben werden sollten, und nach Empfehlungen, welchen Ansatz wir verwenden sollten, wenn unsere Dienste getestet werden.

Sollten wir Tests schreiben, die http-Anfragen stellen und bestätigen, dass die Antworten so sind, wie sie sein sollten? Sollten wir uns darauf konzentrieren, nur die interne Logik der Servicemethoden zu testen und sich nicht darum zu kümmern, die tatsächlichen Anfragen zu testen? Oder sollten wir beides tun? Gibt es andere Empfehlungen für das, was wir testen sollten?

Wir suchen wirklich nach Erklärungen und Anleitungen und würden wirklich jeden Ratschlag schätzen, den wir bekommen können.

    
KodeKreachor 06.03.2012, 16:05
quelle

2 Antworten

11

Ich habe festgestellt, dass Webservices, insbesondere der WCF-Client und -Server, in den folgenden Szenarios zusätzlich zum regulären Komponententest nützlich sind:

  1. Akzeptanztests, wo Sie Ihren gesamten Service testen und Dinge an den Extremitäten einstecken wollen.
  2. Testen einer bestimmten WCF-Verbindung, Erweiterung, Verhalten usw.
  3. Testen, ob Ihre Schnittstelle und Ihre Datenelemente korrekt eingerichtet sind.

Die meiste Zeit versuche ich ein sehr einfaches Setup mit einem einfachen http zu verwenden und alles im Code zu verdrahten. Sofern ich keine Integration oder Akzeptanztests bin, teste ich den Client nicht gegen den Server, stattdessen verspotte ich einen von ihnen, so dass ich den anderen isoliert testen kann. Im Folgenden finden Sie Beispiele zum Testen von WCF-Clients und -Diensten:

%Vor%

HINWEIS

Ich hatte vergessen zu erwähnen, dass wenn Sie einen WCF-Dienst mit irgendetwas, das den dynamischen Proxy von Schlössern verwendet, verspotten wollen, dann müssen Sie verhindern, dass ServiceContractAttribute in den Schein kopiert wird. Ich habe einen Blogpost zu diesem Thema, aber im Grunde registrierst du ihn Attribut als eins, um die Replikation zu verhindern, bevor Sie den Schein erstellen.

%Vor%     
Bronumski 24.04.2012, 22:29
quelle
3

Nun, im Grunde denke ich, dass Sie eine zweiteilige Teststrategie brauchen.

Der erste Teil wäre echte Komponententests, bei denen die Klassen vollständig unabhängig von einer Webanforderung getestet würden ... da die Hauptdefinition eines Komponententests ohne zusätzliche Umgebungen oder Setups ausgeführt wird andere als die im Test selbst.

Sie würden also Unit-Test-Projekte erstellen, in denen Sie die Code-Klassen Ihrer WCF-Services instanziieren würden, um sicherzustellen, dass die Logik korrekt ist, ähnlich wie Sie den Rest Ihrer Klassen testen.

Der zweite Teil wäre eine Reihe von Integrationstests, die Ihre Anwendung auf End-to-End-Art testen würden. Natürlich brauchen Sie hier die ganze Enchilada, den Webserver, die Datenbank und so weiter.

Auf diese Weise wissen Sie, dass Ihre Logik genau ist und dass Ihre Anwendung funktioniert.

    
Sergio Romero 24.04.2012 20:05
quelle