Wie teste ich eine Web Forms-Site? Es scheint mir, dass so viel davon vom Zustand und den Benutzereingaben abhängt, dass es nicht machbar wäre.
Wenn es nicht machbar ist, gibt es eine gültige automatisierte Alternative?
Wie teste ich eine Web Forms-Site? Es scheint mir, dass so viel davon vom Zustand und den Benutzereingaben abhängt, dass es nicht machbar wäre.
Wenn es nicht machbar ist, gibt es eine gültige automatisierte Alternative?
Antworten:
Ja, du kannst. Sie müssen nur darauf achten, Ihre Bedenken gut zu trennen. Kurz gesagt, Sie müssen Ihre gesamte Logik aus dem Code-Behind entfernen und in andere Klassen einordnen.
Hierfür gibt es zwei Möglichkeiten.
Der einfache Weg besteht darin, alle Event-Handler in Bezug auf "Welche Informationen gibt mir das System? Welche Informationen muss ich auf der Seite einfügen?" Zu überdenken. und dann eine Serviceklasse bereitstellen, die diese Konvertierung vornimmt.
In diesem Fall sollte die Serviceschicht nur sehr wenig über die Art Ihrer Präsentationsschicht wissen. Sie müssen weiterhin die vom Service zurückgegebenen Daten verwenden und die richtigen Komponenten des WebForms in Ihren Code-Behind einfügen. Dies bleibt ungetestet (zumindest bei Komponententests können Sie weiterhin Integrationstests durchführen). Aber das ist selten der Fall, bei dem Code schief geht. Es ist wahrscheinlicher, dass die Logik versagt.
Eine kompliziertere, aber effektivere Methode ist die Verwendung des Model View Presenter-Musters . Als wir das versuchten, stellten wir fest, dass sich die Presenter sehr schnell an das Framework gewöhnt hatten und je weiter wir MVP entwickelten, desto klarer wurde, dass MVP wirklich MVC sein wollte, aber nicht sein konnte.
Das haben andere jedoch sehr erfolgreich getan - es gibt sogar ein Webformsmvp-Framework , mit dem Sie das schwere Heben beseitigen können -, sodass Ihre Laufleistung variieren kann.
Ganz offensichtlich ist eine gesamte Webformularseite keine Einheit und kann daher nicht einheitentestet werden. Es gibt jedoch einige Dinge, die Sie für automatisierte Tests tun können:
Es tut mir leid, dass ich den "Einheit" -Teil der Frage verpasst habe ...
SeleniumHQ ist dein Freund für Tests vom Frontend. Es ist kein Unit-Test, eher wie ein Black-Box-Test. Sie müssen sich noch gültige Testfälle überlegen ...
Aus Erfahrung sprechen: Nur wenn es richtig gemacht wird. Mit "richtig" meine ich ein Minimum an Code-Behind und so etwas wie den oben erwähnten Model-View-Presenter, um das Web-Formular "dumm" zu machen. Bei Brownfield-Anwendungen erweist sich dies in der Regel als sehr schwierig, da sie nicht in diesem Sinne entwickelt wurden und es eine nahezu herkulische Anstrengung ist, Seiten umzugestalten / umzuschreiben, um sie zu verwenden.
Ich finde, Unit-Web-Tests sind äußerst nützlich, auch wenn sie nur eine allgemeine Vorstellung von einem Regressionsfehler oder neuen Projekten vermitteln sollen.
In Bezug auf den Status erstellen Sie Ihre Komponententests wie bei Tests ohne Benutzeroberfläche. Sie löschen die Datenbank zu Beginn des Tests und erstellen die Datenbank so neu, dass sie nur den Startstatus enthält. Jeder Komponententest kapselt dann eine einzelne Seite oder normalerweise eine bestimmte Aufgabe auf einer Seite.
http://watin.org/ ist ein weiteres Webtest-Tool, jedoch für C # /. NET. Sie schreiben die Tests als Unit-Tests:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
Es ist derzeit IE-basiert, bietet jedoch experimentelle Unterstützung für Firefox und Chrome. Sie können so ziemlich alles automatisieren, was Sie in manuellen Tests tun würden, einschließlich der Interaktion mit Javascript.
Sie können eine Website nicht einzeln testen, nur weil Webanforderungen über eine Leitung (oder über einen TCP-Stack) erfolgen. Somit passen die Tests nicht zur Definition des "Einheitentests", es wären wahrscheinlich Ende-zu-Ende-Tests.
Für diese Art von Tests können Sie eine Suite wie Selenium verwenden, die einen Webbrowser hinter den Kulissen ausführt. Ein Wort der Warnung: Normalerweise ist diese Art der Prüfung sehr schwierig und unvorhersehbar, da es viele bewegliche Teile gibt!
Interessanter ist jedoch, dass es mich ein bisschen beunruhigt, warum Sie Webformulare überhaupt testen müssen . Stecken Sie nicht zu viel Logik in den Code dahinter und haben zufällig eine anämische Geschäftslogik?
In den letzten 5 Jahren hat sich Jasmine als Schlüsselinstrument für Front-End-Unit-Tests herauskristallisiert. Es wird häufig in automatische Build-Tests mit Node und npm integriert
Per https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine ist ein Open-Source-Testframework für JavaScript. [2] Ziel ist es, auf jeder JavaScript-fähigen Plattform ausgeführt zu werden, weder in die Anwendung noch in die IDE einzugreifen, und eine einfach zu lesende Syntax zu haben. Es wird stark von anderen Unit-Testing-Frameworks wie ScrewUnit, JSSpec, JSpec und RSpec beeinflusst. [3]
Trotz aller Erwähnungen von Javascript kann es auch zum Unit-Testen eines einfachen Webformulars verwendet werden.
Bei der Entwicklung einer ASP.NET-Site konnten wir Komponententests für Folgendes ausführen:
Es ist möglich, all dies abhängig von Ihrer Architektur zu TDD. Das einzige, was Sie nicht testen können, ist das Layout der Markup-Datei.