Visual Studio Unit-Testing der Windows Forms
Arbeiten wir an einem Projekt in Visual Studio 2008. Wir sind mit dem built-in-Test-suite bereitgestellt (die von Microsoft.VisualStudio.TestTools.UnitTesting-namespace). Es stellt sich heraus, dass zu unserem Leidwesen, viel Komplexität (und damit Fehler) aufgewickelt codiert in unsere UI-Schicht. Während unsere unit-tests zu tun, eine gute Arbeit für unsere business-Schicht wird durch unsere UI-layer ist eine ständige Quelle der irritation. Wir idealerweise gerne unit-test, sowie. Kennt jemand einen guten "Microsoft-kompatible" Art und Weise zu tun, die in visual studio? Wird es einzuführen irgendeine Art von Konflikt zu 'mischen' unit-Test-frameworks wie nUnitForms mit dem Microsoft Zeug? Gibt es offensichtliche Bärenfallen, die ich bewusst sein sollten mit unit-Tests bildet?
InformationsquelleAutor GWLlosa | 2008-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie brauchen, um die Umgestaltung der UI, so dass UI braucht keine unit-Tests. UI enthalten sollte minimale oder keine business-Logik. Es gibt viele Muster, die mit diesem Thema befassen. Martin Fowler hat einen sehr guten Artikel, der erklärt eine Menge über diese Muster: http://martinfowler.com/eaaDev/uiArchs.html
Gibt es ein kleines Kapitel in der Refactoring-Buch von Martin Fowler, dass die Gespräche über die Umgestaltung der nicht testbaren UI. Man konnte auch Lesen, Effektiv zu Arbeiten Mit Legacy Code.
Anmerkung: Es gibt ein tool, das verwendet werden könnte, zur Automatisierung der Benutzeroberfläche testen. SilkTest mir in den Sinn kommt. Aber ich würde Sie nicht verwenden, wenn möglich.
Die Sache ist, dass viele der UI-Logik wird sehr viel über das UI, auch nicht das Geschäft. Seine Sachen wie "Prompt der Benutzer zu speichern, wenn die Platte schmutzig ist und Sie ändern Bildschirme." und "Stellen Sie sicher, dass der Benutzer ausgefüllt hat alle erforderlichen Eingabefelder, wenn Sie drücken Sie OK" und anderen Steuerelementen
check-out HumbleDialog und PassiveView in dem Artikel habe ich vorgeschlagen.. würde es nehmen alle UI-Logik im presenter und UI wird sehr dumm und einfach zu testen, indem Sie einfach anzeigen
Was kommt zuerst, das Huhn oder das ei? Um Sie umgestalten zu können, müssen Sie einen test, so können Sie vergleichen Sie die Ergebnisse vor und nach der Umgestaltung. Deshalb, wenn Sie eine legacy-UI, das domain/repository-Logik, ist der EINZIGE Ort, um die Tests zu tun ist in der Benutzeroberfläche.
InformationsquelleAutor StackUnderflow
Dies ist alles schön und gut für die regelmäßige Anwendung-unit-Tests ... aber wenn Sie erstellen Benutzer-Steuerelemente, die Notwendigkeit von unit tests für die Kontrolle von Verhalten und Zuständen, es muss ein unit-test-framework zu. NUnitForms könnte die Antwort für Sie - persönlich brauche ich, check it out selbst.
InformationsquelleAutor
Ich die Passive View-Architektur als detaillierte hier http://martinfowler.com/eaaDev/PassiveScreen.html
Grundsätzlich verschieben Sie alle Ihre code in den Formularen in eine separate Klasse mit dem Namen der xxxUI. Die form implementiert dann eine IxxxUI-Schnittstelle und setzen Sie alles in der xxxUI Klasse benötigt. Sie können sich wahrscheinlich die Dinge zu vereinfachen und zu aggregieren Umgang mit mehreren Steuerungen in eine Methode.
Den Fluss, dann geht Der BENUTZER auf einen button klicken. Die Schaltfläche ruft eine Methode auf das entsprechende UI-Klasse. Übergeben die notwendigen Parameter. Die UI-Klasse Methode ändert das Modell. Dann über die Schnittstelle aktualisiert die Benutzeroberfläche.
Für unit-Test Sie haben test-oder dummy-Klassen implementieren die Schnittstellen und registrieren Sie sich mit dem UI-Klassen. Sie können diesen test-Klassen-Feuer jede Art von input und reagieren entsprechend. In der Regel habe ich Sequenz-Listen, die Sache in einer exakten Reihenfolge. (Tippen Sie auf Eine, klicken Sie auf diese scrollen, dann Typ B, etc).
InformationsquelleAutor RS Conley
Es ist ganz einfach zu testen Winforms mit ApprovalTests (www.approvaltests.com oder nuget-Homologation) und Sie sind kompatibel mit MsTest sowie Nunit.
Gibt es ein video ist hier, wie es zu tun: https://www.youtube.com/watch?v=hKeKBjoSfJ8
Aber der Prozess ist einfach.
1) erstellen Sie das Formular, das Sie testen möchten, in dem Zustand, Sie wollen, dass es verifiziert ist.
2) rufen Sie WinFormApprovals.Überprüfen(form)
ApprovalTests verwendet die golden master-Paradigma zu screen-capture-Ergebnis. wenn Sie es mögen, benennen Sie einfach die Datei zu .genehmigt und den test bestanden.
Die große Sache über diese für das refactoring bestehenden Codes ist, Sie gar nicht zu kümmern, was das Ergebnis ist, da Sie nur damit beschäftigt sind, dass Sie nicht, es zu ändern.
InformationsquelleAutor llewellyn falco
Check-out Jeremy D. Miller WIP Präsentation Muster-wiki-Seite für die Umgestaltung inspiration 🙂
Miller ist ein Buch zu schreiben, und wie es aussieht ist es ein must-have für diese Art der Sache.
InformationsquelleAutor Mark Simpson
Ich verwendet habe, NUnitForms, wenn es um die Prüfung meiner eigenen UI-Steuerelemente mit guten Ergebnissen! Ich würde den anderen auch Zustimmen umgestaltet werden, wenn Sie mit standard (oder auch getestet) UI-Steuerelemente.
Wenn der Fokus auf der Prüfung der tatsächlichen Kontrollen, die ich benutzen würde NUnitForms wie es sein kann, erweitert um Unterstützung für Ihre neue Steuerung. Jedenfalls, wenn Sie nicht mit manuellen Prüfung benötigen Sie eine lib, die das tun, "image based" - Analyse der angezeigte Ergebnis.
Habe ich versucht, TestComplete, aber obwohl ich es ein bisschen zu teuer, da könnte ich code eine ähnliche lib die nur für die Bild-Vergleich in c#. Also mein plan wäre der, test der Kontrollen getrennt und dann die Umgestaltung der Benutzeroberfläche wie bereits erwähnt, meinen die anderen.
InformationsquelleAutor Henrik
Sollten Sie verwenden Microsoft Coded UI test der UI-Schicht. Dies beinhaltet das schreiben (oder Aufnahme -) tests, Mimische Aktionen, die ein Benutzer durchführen würde und schreiben von assert-Anweisungen, um sicherzustellen, dass die korrekte Ausgabe erreicht wird.
Natürlich, dies ist wohl nicht unit-testen, da es schwierig ist, Aktionen erstellen, die vom front-end, das testen einer einzelnen Einheit von Arbeit und ist nicht ein Ersatz für andere unit-Tests. Ich Stimme auch, dass die front-end-business-Logik sollte eine dünne wie möglich. Dies wird jedoch füllen alle Lücken, wo Ihre unit tests nicht abgedeckt sind. Hoffentlich nur kleine Einheiten von Arbeit, die nicht abgedeckt werden durch Ihre unit-tests, so dass die tests der codierten UI fangen den verbleibenden ungetesteten Einheiten.
Codierten UI kommt gebaut mit den neuesten Versionen von Visual Studio Premium. Ich schlage vor, dass Sie nicht nur verwenden Sie die Datensatz-Funktionen, sondern lernen, wie Sie schreiben die tests selbst, wie dieses gibt Ihnen mehr Flexibilität.
InformationsquelleAutor Sam