2009-08-13 8 views
12

Ich suchte nach zusätzlichen Möglichkeiten zum Testen von ASP.NET MVC-Anwendungen und stieß auf Steve Sandersons MvcIntegrationTestFramework. Der Ansatz sieht ziemlich vielversprechend aus, aber ich habe mich gefragt, ob irgendjemand tatsächlich Erfahrungen zu teilen hatte.Hat jemand Steve Sandersons MvcIntegrationTestFramework benutzt?

+0

Ich habe es noch nicht benutzt, aber die Idee, den Browser vom Integrationstest zu entkoppeln, ist sehr ansprechend. –

+0

Aber für mich bedeutet Integration die Integration der Schichten. Und Browser (vor allem Javascript und Ajax) ist in der Tat eine Schicht, die getestet werden sollte. –

+0

Hallo James. Das muss sicherlich getan werden, aber meiner Erfahrung nach ist es schwierig zu automatisieren und aufgrund der Unterschiede im Browser müssen Sie es für eine Reihe von ihnen tun. Dies ist also kein Ersatz, sondern eine Ergänzung zu Browser-Tests. Und nützlich, um Regressionen zu finden. – Maurice

Antwort

7

Ich habe einige wirklich gute Ergebnisse davon. Es ist mir egal, was jemand anderes hier über die Notwendigkeit sagt, Ansichten zu testen, sobald Sie Ihre erste Codezeile zu einer Ansicht hinzufügen, selbst wenn der Code streng auf die Präsentation bezogen ist, führen Sie ein Fehlerpotential ein Es wäre eine gute Idee, automatisierte Tests zu schreiben. Mein Hauptinteresse besteht darin, so viele weiße und gelbe Bildschirmfehler/-fehler wie möglich zu erfassen. Um dies zu tun haben wir die Schnipsel aus Steven einleitender Blog-Post mit, um sicherzustellen, dass die Seite richtig gemacht, ohne irgendwelche Ausnahmen zu werfen:

Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html")); 

Die kleinen Fallen, die ich mit diesem Rahmen sehen könnte sein:

  • Wenn Ihre Website eine ziemlich komplexe Modellbindung zwischen den Ansichten und den Aktionsmethoden durchführt, können Sie einige ziemlich große NameValueCollections erstellen, wie in diesem Beispiel (eine Aktionsmethode, die ein LogonModel-Ansichtsmodellobjekt annimmt), da ich nicht weiß Sie können keine komplexen View-Modell-Objekttypen mit diesem Framework in Ihre Aktionsmethoden übergeben:

var result = browsingSession.ProcessRequest("/account/logon", HttpVerbs.Post, new NameValueCollection { {"UserName","myName"}, {"Password", "myPassword"}, {"returnUrl", "/home/myActionMethod"} });

  • browsingSession.ProcessRequest Ausführen („url“) erstellt eine Anwendung Host/Kontext, der den Web-Code tatsächlich ausführt, dass Sie die Konfiguration im Projekt Testen verwenden, die Sie testen. Dies bedeutet, dass die Tests ein wenig langsam ablaufen und möglicherweise echte Daten ändern können, da ich keine schnelle und einfache Möglichkeit sehe, Ihre Datenzugriffsrepositorys in Ihrem getesteten Webprojekt mit gefälschten Versionen zu vertauschen, indem Sie alle darin enthaltenen Funktionen verwenden Test-Framework. Mit anderen Worten, Sie müssen wahrscheinlich Ihre eigenen rollen mit einigen web.config-basierten Mitteln.
+0

Follow-up - Ich empfehle dringend, zu MVC3 zu wechseln und RazorGenerator zu verwenden. Sie können MVC2 und MVC3 gleichzeitig ausführen und einzelne Webseiten gleichzeitig migrieren, was nahtlos funktioniert. Obwohl das Framework von Steve Sanderson innerhalb der Grenzen von MVC2 gut funktioniert, fanden wir es äußerst schwierig, die Änderungen an den hartcodierten Dateipfaden zu verwalten, die notwendig waren, wenn das Testframework auf unseren Dev-Maschinen vs. auf unserer C.I. Server. Dieses Problem tritt bei RazorGenerator + MVC3 nicht auf. –

+1

Danke für die Weiterverfolgung! Kannst du kurz erklären, wie RazorGenerator dir geholfen hat, MvcIntegrationTestFramework für deine Integrationstests zu ersetzen? Wie hilft die Vorkompilierung Ihrer Razor-Ansichten dabei? Vielleicht hast du darüber gebloggt :-) – Oliver

0

Ich habe dieses Framework nicht verwendet. Aber basierend auf meiner Erfahrung beim Lesen seines Buches - Pro ASP.NET MVC Framework, und einem anderen Validierungsrahmen xVal, den er entwickelt hat, würde ich sagen "ER IST GREAT".

+0

Ich mag sein Buch auch sehr. Tatsächlich habe ich gerade eine Kopie neben mir. – Maurice

0

Experimentierte ein wenig und es könnte in einigen Situationen sehr nützlich sein. Allgemein Daumen hoch und wenn ich weitere Arbeit daran sah, würde ich auf ein zukünftiges Projekt zurückgreifen.

Ich habe nicht wie bereits WatIn Setup und kümmert sich um einige Dinge, die ich nicht gerne wieder in diesem Rahmen angehen würde. Z.B. Authentifizierung durch einen Dialog, der wahrscheinlich eine Codeänderung erfordern würde.

1

Nachdem vor ardave's answer eine beim Lesen, wir tatsächlich gingen es Orchard Marinas.info basierte Anwendung für unseren neue für sie auszuprobieren.

Zunächst einmal empfehle ich jedem von einer Gabel von zu starten, da es noch einfacher ist, als das Original einzurichten.

Für jede "normale" MVC3 App funktioniert es einfach. Leider hat es zusammen mit Orchard nicht gut gespielt, zumindest nicht mit einer unveränderten Version von Global.asax.cs. Also gingen wir immer noch die browser based testing road runter, aber wir benutzen sie weiter, um Orchard Befehle innerhalb der App auszuführen, was schnell genug ist.