Was ist der beste Weg, erwartete Fehler von WCF-Diensten zu testen?
Ich versuche, einen WCF-Dienst zu testen, der (korrekt) FaultExceptions für einen bestimmten reproduzierbaren Fehler wirft. Die Komponententests rufen eine Instanz des WCF-Clients ab und rufen die entsprechende Servicemethode auf, die eine FaultException auslöst.
All das funktioniert so, wie Sie es erwarten würden, aber ich habe Schwierigkeiten, dies zu testen, da der Fehler dazu führt, dass die IDE bricht, wenn der Fehler nicht in der Service-Implementierung auftritt. Da ich Fehler und keine Ausnahmen verwende, erwartete ich, dass die IDE die Ausnahme serialisiert und sie an den Client sendet, wo sie eine Ausnahme auslösen würde.
Ich sehe, dass es eine Konfigurationsoption gibt, um das Brechen für bestimmte nicht behandelte Ausnahmen zu deaktivieren, aber ich hatte gehofft, dass jemand einen besseren Weg zeigen könnte, dieselben Ergebnisse zu erzielen, da dies in einer Teamumgebung nicht einfach möglich ist .
Hier ist ein Beispielcode, wie die Implementierung momentan aussieht ...
Das Komponententestprojekt hat einen Dienstverweis auf meinen WCF-Dienst, und ich habe die Schnittstelle als solche definiert:
%Vor%Der Fehler ist als solcher definiert:
%Vor%Der Code, der den Dienst aufruft, sieht ungefähr so aus:
%Vor% Sie können immer ExpectedExceptionAttribute
(in NUnit) verwenden, um sicherzustellen, dass dies die Ausnahme ist, die ausgelöst wird. MSTest hat ein ähnliches Konzept.
Wenn Sie eine Mock-Verifizierung durchführen müssen, würde ich try / catch blockieren und im catch verifizieren und dann die Ausnahme auslösen.
AKTUALISIEREN
Wenn Sie ExpectedException
-Attribut verwenden, dürfen Sie die Ausnahme nicht abfangen, stattdessen müssen Sie die NUnit, die Ihren Test ausführt, dazu bringen, sie zu fangen.
Wenn Sie spezielle Informationen in der Ausnahme verifizieren müssen, fangen Sie die Ausnahme ab, überprüfen Sie die Informationen und wiederholen Sie dann:
%Vor%mattv,
Warum muss dieser Test auf den Dienst remote zugreifen? Von was ich deinen Code sehe:
%Vor%Erhält irgendwie einen Service-Client und keine Service-Instanz. Ich würde empfehlen, die Service-Beton-Klasse direkt für Komponententests zu testen.
Wenn Sie dieses Szenario jedoch benötigen , haben Sie versucht, die Ausnahme NICHT zu fangen und den Test auszuführen? Gibt es das gleiche Ergebnis?
Und übrigens, wenn Sie fangen müssen und wiederholen Sie das folgende Muster:
%Vor%Tags und Links wcf c# unit-testing faultexception wcf-faults