Best Practice für die Integration von TDD in die Entwicklung von Webanwendungen?


26

Komponententests und ASP.NET-Webanwendungen sind ein zweideutiger Punkt in meiner Gruppe. In den meisten Fällen fallen gute Testverfahren durch die Risse und Webanwendungen werden für mehrere Jahre ohne Tests in Betrieb genommen.

Die Ursache dieses Problems liegt in der Regel in der mühseligen Erstellung von UI-Automatisierung in der Entwicklungsphase.

Wie integrieren Sie oder Ihre Organisation die besten TDD-Praktiken in die Entwicklung von Webanwendungen?

18

Unit-Test wird erreichbar sein, wenn Sie Ihre Schichten entsprechend trennen . Wie Rob Cooper angedeutet, keine Logik in Ihr WebForm außer Logik zur Verwaltung Ihrer Präsentation. Alle anderen Stuff-Logic- und Persistence-Layer sollten in separaten Klassen aufbewahrt werden und dann einzeln getestet werden.

Um die GUI zu testen, mögen einige Leute selenium. Andere beschweren sich darüber, dass es ein Schmerz ist, sich einzurichten.

+1

na ja, vielleicht Selen ein Schmerz für einige einzurichten .. aber das ist, warum andere einen Job haben :) 13 jul. 152015-07-13 12:45:43


4

Ich schichte die Anwendung und mindestens Komponententest vom Presenter/Controller (je nachdem, was Sie bevorzugen, mvc/mvp) auf die Datenschicht. Auf diese Weise habe ich eine gute Testabdeckung über den Großteil des geschriebenen Codes.

Ich habe FitNesse, Wattin und Selenium als Optionen zur Automatisierung der UI-Tests angeschaut, aber ich bin noch nicht dazu übergegangen, diese bei irgendwelchen Projekten zu verwenden, also bleiben wir bei menschlichen Tests. FitNesse war der, auf den ich mich stützte, aber ich konnte das nicht einführen, ebenso wie TDD einzuführen (macht das mich schlecht? Ich hoffe nicht!).


2

Dies ist eine gute Frage, die ich auch abonniert werden wird :)

Ich bin noch relativ neu auf dem Web-Entwickler, und ich viel Code zu suchen, die weitgehend unerprobt ist.

Für mich behalte ich die UI so leicht wie möglich (normalerweise nur ein paar Zeilen Code) und testen Sie den Mist aus allem anderen. Zumindest kann ich dann ein gewisses Vertrauen darauf haben, dass alles, was es auf der Benutzeroberfläche macht, so korrekt ist, wie es sein kann.

Ist es perfekt? Vielleicht nicht, aber zumindest ist es immer noch ziemlich hoch automatisiert und der Kerncode (wo die meisten "Magie" passiert) hat immer noch eine ziemlich gute Abdeckung.


2

Eine allgemeine Praxis besteht darin, den gesamten Code, den Sie aus dem Codebehind herausholen können, in ein Objekt zu verschieben, das Sie isoliert testen können. Ein solcher Code folgt normalerweise den MVP- oder MVC-Entwurfsmustern. Wenn Sie auf "Rhino Igloo" suchen, finden Sie wahrscheinlich den Link zu seinem Subversion-Repository. Dieser Code ist eine Studie wert, da er eine der besten MVP-Implementierungen auf Web Forms zeigt, die ich gesehen habe.

Ihr Code-Behind wird, wenn dieses Muster folgend, zwei Dinge tun:

  1. Transit alle Benutzeraktionen auf den Vortragenden.
  2. Vom Bereitsteller bereitgestellte Daten rendern.

Unit-Test der Presenter sollte trivial sein.

Update: Rhino Iglu ist hier zu finden: https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/


0

Es gab Versuche, auf immer frei UI Automation Microsoft (im .NET Framework 3.0) mit Web-Anwendungen (ASP.NET) zu arbeiten. Eine deutsche Firma namens Artiso hat zufällig einen Blogeintrag geschrieben, der erklärt, wie man das erreicht (link).

Ihr Blogpost verlinkt jedoch auch einen MSDN Webcasts, der das UI Automation Framework mit winforms erklärt. Nachdem ich mir das angesehen habe, habe ich bemerkt, dass Sie die AutomationId benötigen, um einen Verweis auf die entsprechenden Steuerelemente zu erhalten. In Webanwendungen verfügen die Steuerelemente jedoch nicht über eine AutomationId.

Ich habe Thomas Schissler (Artiso) danach gefragt und erklärt, dass dies ein großer Nachteil für den InternetExplorer ist. Er bezog sich auf eine ältere Technologie von Microsoft (MSAA) und hoffte, dass IE8 das besser machen würde.

Allerdings gab ich auch Wattin einen Versuch und es scheint ziemlich gut zu funktionieren. Ich mochte sogar Wax, mit dem man einfache Testfälle über Microsoft Excel-Arbeitsblätter implementieren kann.


0

Ivonna kann Unit Ihre Ansichten testen. Ich würde immer noch empfehlen, den Großteil des Codes in andere Teile zu verschieben. Aber einige Code nur gehört dort, wie Verweise auf Steuerelemente oder Steuerelement Ereignishandler.


2

Ich würde im Allgemeinen vermeiden zu testen, dass beinhaltet UI-Elemente. Ich bevorzuge Integrationstests, die alles von Ihrer Datenbankschicht bis zur Ansichtsebene (aber nicht das tatsächliche Layout) testen.

Versuchen Sie, eine Testsuite zu starten vor eine Zeile tatsächlichen Code in einem neuen Projekt schreiben, da es schwerer ist, Tests später zu schreiben.

Wählen Sie sorgfältig, was Sie testen - schreiben Sie nicht unbedingt Tests für alles. Manchmal ist es eine langweilige Aufgabe, also mach es nicht schwerer. Wenn Sie zu viele Tests schreiben, riskieren Sie, diese Aufgabe unter dem Gewicht zeitraubender Wartung aufzugeben.

Versuchen Sie, so viel Funktionalität wie möglich in einem einzigen Test zu bündeln. Wenn also etwas schief geht, werden sich die Fehler trotzdem ausbreiten. Wenn Sie beispielsweise eine digestgenerierende Klasse haben, testen Sie die tatsächliche Ausgabe und nicht jede einzelne Hilfsfunktion.

Vertrauen Sie sich nicht. Gehen Sie davon aus, dass Sie immer Fehler machen werden, und schreiben Sie Tests, um Ihr Leben einfacher und nicht härter zu machen.

Wenn Sie nicht gut fühlen, über das Schreiben von Tests, sind Sie wahrscheinlich etwas falsch gemacht;)