Frage

Die Berechnungen in meinem code gut getestet, aber da es so viel GUI-code, meinem gesamten code-coverage niedriger ist, als ich möchte.Gibt es irgendwelche Richtlinien auf unit-testing-GUI-code?Macht es überhaupt Sinn?

Zum Beispiel, es gibt Graphen, in my app.Ich habe nicht in der Lage, um herauszufinden, wie automatisieren Sie das testen des Graphen.Es braucht menschliche Auge, AFAIK, um zu überprüfen, ob der graph korrekt ist.

(Ich bin mit Java-Swing)

War es hilfreich?

Lösung

Designs wie MVP und MVC versuchen typischerweise zu abstrahieren, so viel Logik aus dem tatsächlichen GUI wie möglich. Ein sehr beliebter Artikel über dies ist "The Humble Dialogfeld" von Michael Feathers. Persönlich habe ich gemischte Erfahrungen gemacht mit dem Versuch, Logik aus dem UI zu bewegen - manchmal ist es sehr gut funktioniert, und zu anderen Zeiten ist es mehr Mühe gewesen als es wert ist. Es ist etwas außerhalb meines Fachgebietes though.

Andere Tipps

Natürlich ist die Antwort MVC zu verwenden und wie viel Logik aus der GUI wie möglich zu bewegen.

Dass gesagt wird, hörte ich von einem Kollegen vor langer Zeit, dass, wenn SGI wurde OpenGL auf neue Hardware zu portieren, sie eine Reihe von Unit-Tests hatten, die einen Satz von primatives auf den Bildschirm zeichnen würde dann eine MD5-Summe der Berechnung Bildspeicher, Framebuffer. Dieser Wert könnte dann zu bekannten guten Hash-Werten verglichen werden, um schnell festzustellen, ob die API pro Pixel korrekt.

Sie können versuchen, UISpec4J ist eine Open-Source-funktionelle und / oder Unit-Test-Bibliothek für Swing-basierte Java-Anwendungen ...

Hier einige Tipps:

Versuchen Sie, die meisten Code entfernen Sie von der GUI können (müssen Controller und Modellobjekt) Auf diese Weise werden sie in der Lage sein, zu testen, ohne die GUI.

Für die Grafik, sollten Sie den Wert testen, die Sie den Code liefern, die die Grafik erzeugen.

Sie können versuchen, verwenden Gurke und Swinger für Swing-GUI-Anwendungen in einfachem Englisch Funktionsabnahmen zu schreiben. Swinger verwendet Netbeans' Jemmy Bibliothek unter der Haube die App zu fahren.

Gurke können Sie Tests wie folgt schreiben:

 Scenario: Dialog manipulation
    Given the frame "SwingSet" is visible
    When I click the menu "File/About"
    Then I should see the dialog "About Swing!"
    When I click the button "OK"
    Then I should not see the dialog "About Swing!"

Werfen Sie einen Blick auf diese Swinger Video-Demo es zu sehen in Aktion.

Es gibt Selenium RC , die eine Web-basierte Benutzeroberfläche testen wird automatisieren. Es wird Aktionen aufzeichnen und wiedergeben. Sie werden immer noch durch die Interaktionen mit Ihrem UI gehen müssen, so wird dies mit einer Deckungssumme nicht helfen, aber es kann verwendet werden für automatisierte Builds.

Der Test ist eine form der Kunst.Ich Stimme der Logik entfernt werden sollte, GUI, so viel wie möglich.Wir richten dann unsere unit-Tests gibt es.Wie alles andere Tests über die Verringerung der Gefahr.Sie nicht immer brauchen, um alles zu testen, aber eine Menge Zeit, die beste Sache ist, zu brechen, die verschiedene Tests für verschiedene Bereiche.

Die andere Frage ist, was Sie wirklich versuchen zu test auf der UI-Ebene.UI-Tests ist die teuerste testen, weil es dauert in der Regel länger, um zu erstellen, zu pflegen und es ist die spröde.Wenn Sie testen Sie die Logik, um zu wissen, die Koordinaten korrekt sind, bevor versucht wird, die Linie zu zeichnen, was testen Sie genau?Wenn Sie testen möchten ein Diagramm mit einer roten Linie gezeichnet wird.Können Sie geben es eine Reihe vorgegebener Koordinaten und testen, ob bestimmte Pixel sind rot oder nicht rot?Wie oben vorgeschlagen bitmap Vergleiche arbeiten, Selen, aber mein Fokus wäre nicht zu über testen der GUI, sondern testen Sie die Logik, der helfen wird erstellen Sie die Benutzeroberfläche und dann auf das konzentrieren, was Teil des UI-Pausen oder verdächtig ist und den Fokus auf eine Handvoll von tests gibt.

Sie können mit JFCUnit Ihre GUI testen, aber Grafiken kann schwieriger sein. Ich habe auf ein paar Gelegenheiten Schnappschüsse meiner GUI genommen und es automatisch im Vergleich zu einer früheren Version. Zwar ist dies nicht eine tatsächliche Prüfung nicht zur Verfügung stellen, ist es Ihnen nicht alarmieren, wenn ein automatischer Build die erwartete Ausgabe zu erzeugen, schlägt fehl.

Was ich aus Ihrer Frage zu sammeln, ist, dass Sie eine automatisierte Möglichkeit, dich auf Ihr GUI-Verhalten im Detail zu testen, das Beispiel geben Sie testen, ob eine Kurve tatsächlich korrekt gezeichnet wird.

Einheit Test-Frameworks bieten eine Möglichkeit, automatisierte Tests zu tun, aber ich denke, die Art von Tests, die Sie komplizierte Integrationstests sind tun möchten, die das richtige Verhalten einer Vielzahl von Klassen überprüfen, unter denen die Klassen Ihrer GUI-Toolkit / Bibliothek , die Sie sollten nicht testen wollen.

Ihre Optionen hängen sehr stark davon ab, welche Plattformen / Toolkits / Frameworks Sie verwenden: zum Beispiel eine Anwendung Qt als GUI-Framework Squish können ihre Tests zu automatisieren. Sie überprüfen die Ergebnisse Ihrer Tests einmal, und nachfolgende automatisch durchgeführten Tests vergleichen Sie die Ergebnisse gegen die nachgewiesenen Ergebnisse.

Fenster Licker für Swing & Ajax

Von dem, was ich weiß, ist dies ziemlich kompliziert, und wirklich hängt von der Sprache - zahlreiche Sprachen haben ihre eigene Art und Weise der Prüfung GUI, aber wenn Sie wirklich die GUI testen müssen (im Gegensatz / gui Interaktion zu modellieren), Sie oft eine tatsächliche Benutzer Klicktaste zu simulieren. Zum Beispiel bietet die SWT Rahmen in Eclipse verwendet SWTBot

Wenn Sie Swing-verwenden, FEST-Swing- ist nützlich für das Fahren Ihre GUI und testen Behauptungen. Es macht es ziemlich einfach, Dinge zu testen, wie „wenn ich die Taste A klicken, sollte Dialog B angezeigt werden“ oder ", wenn ich die Option 2 aus dem Drop-down auswählen, werden alle Kontrollkästchen sollte sich Abwahl ".

Die Grafik Szenario, das Sie erwähnen, ist nicht so einfach zu testen. Es ist ziemlich einfach Code-Abdeckung für GUI-Komponenten nur durch Erstellen und Anzeigen von ihnen (und vielleicht fahren sie mit FEST) zu erhalten. Jedoch sinnvoll zu Behauptungen der schwierige Teil ist (und Code-Coverage ohne sinnvolle Aussagen ist eine Übung in Selbsttäuschung). Wie testen Sie, dass das Diagramm nicht auf dem Kopf nach unten gezogen wurde, oder zu klein?

Ich denke, dass man muss nur akzeptieren, dass einige Aspekte des GUIs nicht effektiv durch automatisierte Unit-Tests getestet werden, und dass Sie haben sie auf andere Weise zu testen.

Es ist nicht Ihre Aufgabe, die GUI-Bibliothek zu testen. So kann man ausweichen, die Verantwortung zu überprüfen, was tatsächlich auf dem Bildschirm gezogen und Eigenschaften statt Widgets überprüfen, um die Bibliothek zu vertrauen, dass sie genau das darstellen, was gezogen wird.

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