Wir haben eine ASP.NET WebForms-Anwendung, die wir in eine ASP.NET MVC-Anwendung konvertieren werden - einer der Gründe ist, dass wir Unit Testing in vollem Umfang nutzen können und TDD.Unit testet eine ASP.NET MVC 3-Anwendung
Unsere aktuelle WebForms-Anwendung nutzt häufig HttpModules. Wir diskutieren derzeit darüber, ob wir bei HttpModules bleiben oder globale Filter verwenden sollten (jeder Rat wäre hier großartig).
Allerdings, mit meinen wenigen "Hallo Welt" MVC-Anwendungen testen, habe ich nicht herausgefunden, wie der HttpModule (oder in der Tat der Global Filter) Code beim Unit-Test ausgelöst wird.
Vielleicht liege ich falsch, aber es scheint mir, dass ich das Teil meines Komponententests (Integrationstests) brauche, sonst kann es keine wahre Darstellung dessen sein, was in meinem Produktionscode passiert.
Jede Anleitung wäre sehr willkommen.
Dank
Griff
PS - habe ich die folgenden nach den ersten Reaktionen auf meine Frage.
Einfach hergerichtete Use Case
In Produktion
- Browser eine Anforderung für eine Controller-Methode
- Httpmodule Brände (oder globale Filter) - stellt einen statischen Guid Eigenschaft, um einen Wert zu haben.
- Die Controller-Methode nimmt diesen Wert Guid und verwendet sie in ihrer späteren Logik
- Richtiges Ergebnis dann an den Browser zurückgegeben
In Unit Testing
- Unit-Test ruft die gleiche Controller-Methode
- Das HttpModule (oder der globale Filter) wird nicht ausgelöst - die statische Guid-Eigenschaft hat den Wert Guid.Empty
- Die Steuerung Methode, um diesen Guid Wert annimmt, sondern wirft einen Fehler, weil es eine Leere Guid
- Unit-Test versagt
Meine Gedanken sind war: auf ein
- wenn ein Controller-basiert HttpModule (oder Global Filter) zuerst auszuführen, dann ist das HttpModule eine Abhängigkeit und daher müssen die Ergebnisse seiner Aktion Stubbed sein, damit der Test ein echter Einheit Test wird.
- Wenn der Test den Effekt des HttpModule (oder des globalen Filters) enthalten soll, dann wäre dies ein Integrationstest (obwohl es noch immer nicht klar ist, wie das HttpModule oder der Global Filter als Teil ausgeführt wird) des Integrationstest)
- die Httpmodule (oder globale Filter) sollten ihre eigene Reihe von Einheit haben Tests
ich denke, dies ist der Ansatz nehme ich, aber wenn jemand könnte vorschlagen, wie ich meine Integration bekommen test (wie oben beschrieben) zu arbeiten dann wäre ich sehr dankbar.
Das Problem, wie ich es sehe, ist, dass mein TEST-Projekt das "Startup" -Projekt beim Ausführen meiner Tests, also die HttpModules (definiert in der Datei web.config des ASP.NET MVC) und die Global Filter (definiert in Die Datei global.asax von ASP.NET MVC wird nicht ausgeführt, da die Dateien web.config und global.asax nicht ausgeführt werden. Die Frage bleibt also: Wie bekomme ich diese in meinem Integrationstest?
Vielen Dank aller
Griff
Hallo Justin - vielen Dank für Ihre Antwort. Ich habe meinem ursprünglichen Beitrag einen Anwendungsfall hinzugefügt, um die Situation näher zu erläutern - ich würde mich über Ihr Feedback freuen. Griff – DrGriff