Frage

Daher weiß ich, dass Unit-Tests ein Muss sind.Ich habe den Eindruck, dass TDD der richtige Weg ist, wenn es um das Hinzufügen neuer Module geht.Auch wenn ich es in der Praxis eigentlich nicht tue.Eigentlich ein bisschen so, als würde man Code kommentieren.

Die Realität ist, dass ich Schwierigkeiten habe, mich damit zu befassen, wie ich die Benutzeroberfläche und allgemeiner Objekte, die Ereignisse generieren, einem Unit-Test unterziehen soll:Benutzerkontrollen, asynchrone Datenbankoperationen usw.

So viel von meinem Code bezieht sich auf UI-Ereignisse, dass ich nicht ganz weiß, wie ich überhaupt mit dem Unit-Testen beginnen soll.

Es muss da draußen ein paar Grundierungen und Starter-Dokumente geben?Ein paar Hinweise und Tipps?

Ich arbeite im Allgemeinen in C# (2.0 und 3.5), bin mir aber nicht sicher, ob dies für die Frage unbedingt relevant ist.

War es hilfreich?

Lösung

Denken Sie daran, dass es beim Unit-Testen darum geht, die von Ihnen geschriebenen Codeeinheiten zu testen.Ihre Komponententests sollten nicht testen, ob das Klicken auf eine Schaltfläche ein Ereignis auslöst, sondern ob der von diesem Klickereignis ausgeführte Code das tut, was er soll.

Was Sie wirklich tun möchten, ist zu testen, ob der zugrunde liegende Code das tut, was er soll, damit Ihre UI-Ebenen diesen Code sicher ausführen können.

Andere Tipps

Lesen Sie dies wenn Sie Probleme mit UI-Tests haben

Testen Sie UI-Elemente manuell, wenn das Kosten-Nutzen-Verhältnis bei der Automatisierung minimal ist.Testen Sie alles unter der Oberfläche der Benutzeroberfläche gnadenlos.Verwenden Sie Humble Dialog, MVC oder Varianten, um Logik und Benutzeroberfläche getrennt und lose gekoppelt zu halten.

Sie sollten Logik und Präsentation trennen.Mit den Mustern MVP (Model-View-Presenter)/MVC (Model-View-Controller) können Sie Ihre Logik einem Unit-Test unterziehen, ohne auf UI-Ereignisse angewiesen zu sein.Sie können es auch verwenden Weißer Rahmen um Benutzereingaben zu simulieren.Ich würde Ihnen wärmstens empfehlen, Microsoft zu besuchen Patterns&Practices-Entwicklerzentrum, Werfen Sie insbesondere einen Blick auf Composite Application Block und Prism – Sie erhalten viele Informationen zum testgetriebenen Design.

Die Teile Ihrer Anwendung, die mit der Außenwelt kommunizieren (z. B. Benutzeroberfläche, Datenbank usw.), stellen beim Unit-Testen immer ein Problem dar.Der Ausweg besteht eigentlich nicht darin, diese Schichten zu testen, sondern sie so dünn wie möglich zu machen.Für die Benutzeroberfläche können Sie einen einfachen Dialog oder eine Ansicht verwenden, die nichts macht, was es wert wäre, getestet zu werden, und dann die gesamte Logik in einer Controller- oder Presenter-Klasse unterbringen.Sie können dann ein Mocking-Framework verwenden oder Ihre eigenen Mock-Objekte schreiben, um gefälschte Versionen der Ansichten zu erstellen und die Logik in den Presentern oder Controllern zu testen.Auf der Datenbankseite können Sie etwas Ähnliches tun.

Das Testen von Veranstaltungen ist nicht unmöglich.Sie können beispielsweise eine anonyme Methode für das Ereignis abonnieren, die eine Ausnahme auslöst, wenn das Ereignis ausgelöst wird, oder die Anzahl der Auslösungen des Ereignisses zählt.

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