Frage

Ich möchte eine Reihe von automatisierten Unit-Tests für eine MSMQ-Anwendung erstellen, schreibe ich. Wie ich es sehe, ist die Herausforderung, wie die Event-Handler aus dem Testverfahren aufzunehmen. Das heißt, ich sende eine Nachricht aus dem Testverfahren und brauche ein Ergebnis zurück zu diesem Testverfahren zurückzugeben, die die Nachricht empfängt und verarbeitet wurde. Ich habe keine Ahnung, wie dies zu tun und jede Richtung würde sehr geschätzt werden.

War es hilfreich?

Lösung

Sind Sie nach einer Möglichkeit, Unit-Tests zu schreiben, wo das zu testende System denkt, dass es Ereignisse aus einer Warteschlange empfangen, aber Sie wollen nicht eine echte Schlange während der Tests benutzen?

Schauen Sie sich Rhino Mocks . Damit können Sie eine Mock-Version Ihrer Queue-Schnittstelle erstellen und dann Ereignisse aus sie während des Tests erhöhen. Einige Pseudo-Code die Requester.DoSomething () Methode zu testen, könnte wie folgt aussehen:

// SETUP
MockRepository mocks = new MockRepository();
IQueue mockQueue = mocks.StrictMock<IQueue>();

queue.Received+=null;//create an expectation that someone will subscribe to this event
LastCall.IgnoreArguments();// we don't care who is subscribing
IEventRaiser raiseReceivedEvent = LastCall.GetEventRaiser();//get event raiser for the last event, in this case, Received
Expect.Call(mockQueue.Send).Return(msgId);
mocks.ReplayAll();

// EXEC
Requester req = new Requester(mockQueue);

// We expect this method to send a request to the mock queue object.
req.DoSomething();
// Now we raise an event from the mock queue object.
raiseReceivedEvent.Raise(eventArgs);

// VERIFY
// we would probably also check some state in the Requester object
mocks.VerifyAll();

Schauen Sie sich die Rhino spottet Wiki für alle Details.

Andere Tipps

Typischerweise sollte eine Einheit Testisolat Verfahren getestet. Ich bin nicht vertraut mit MSMQ, aber Sie würden normalerweise ein Mock-Objekt erstellen und übergeben, die zu Ihrem Herstellungsverfahren. Dann können Sie spüren, was das Verfahren auf das Mock-Objekt hat seine verhalte korrekt zu verifizieren und die erwartete Antwort. Das Herstellungsverfahren wird kennt den Unterschied nicht. Unit-Tests ist mehr, um Ihre Methoden sicherzustellen, verhalten sich wie in Isolation erwartet.

Sound wie, was Sie suchen ist ein Integrationstest. Sie können nach wie vor Unit-Test-Frameworks verwenden, um dies zu erreichen, aber ich würde sich in einem automatisierten Build nicht enthalten. Ich würde sie auf eine dedizierte Testgerät (e) bewegen. Unit-Tests stoppen typischerweise einen Build, da sie eine Klasse oder Methode angeben, die nicht wie erwartet verhält. Wo, wie Integrationstests zeigen und Methoden oder Klassen sind nicht miteinander interagieren, wie erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top