An der Oberfläche
Für die Ausführung von GUI-Tests stellt »QTest«
weitere Funktionen bereit, die der Simulation von Maus- und Tastatureingaben dienen. Der Beispieltest verwendet die Funktionen »keyClick(*Widget, Key)«
, »keyClicks(*Widget, Sequenz)«
und »mouseClick(*Widget, Button, Modifier, Position)«
. Gemeinsam ist ihnen, dass sie als erstes Argument einen Zeiger auf das Oberflächenobjekt erwarten, das auf den Prüfstand soll. Dabei interagiert die erste Funktion durch einen einzelnen Tastendruck mit dem Objekt. Als zweiten Parameter erwartet sie entweder einen Buchstaben als »char«
oder einen Qt-Keycode.
Die zweite Funktion bietet die Möglichkeit, gleich eine ganze Reihe von Tastendrücken zu simulieren. Daher erwartet sie als zweites Argument einen »QString«
mit der Zeichenkette. Zur Simulation eines Mausklicks dient die dritte Funktion. Sie erwartet als zweites Argument den zu simulierenden Mausknopf, der sich durch einen Modifier ergänzen lässt – beispielsweise die [Strg]-Taste.
Wichtiger ist allerdings das vierte Argument, da es den Ort des Mausklicks definiert. Ohne Angabe erfolgt er auf die Mitte des Objekts. Das reicht für Menüs und einfache Knöpfe aus. Der Koordinatenursprung für die Angabe des Ausführungsortes ist aber nicht die Mitte des Objekts, sondern, wie bei Qt üblich, die obere linke Ecke des Objekts.
Listing 4
Ein GUI-Test anhand einer Spinbox
01 #include "testhexspinbox.h"
02 #include "testhexspinbox.moc"
03 #include "hexspinbox.h"
04 #include <QTest>
05 #include <QPoint>
06
07 void TestHexSpinBox::testHexSpinBox()
08 {
09 HexSpinBox *spinBox = new HexSpinBox();
10 QCOMPARE(spinBox->value(), 0ll);
11 QTest::keyClicks(spinBox, "A9");
12 QCOMPARE(spinBox->value(), 169ll);
13 QTest::keyClick(spinBox, Qt::Key_Up);
14 QCOMPARE(spinBox->value(), 170ll);
15 QPoint clickPoint(spinBox->size().width() - 2, spinBox->size().height() - 2);
16 QTest::mouseClick(spinBox, Qt::LeftButton, 0, clickPoint);
17 QCOMPARE(spinBox->value(), 169ll);
18 delete spinBox;
19 }
20
21 QTEST_MAIN(TestHexSpinBox);
Ferngesteuert klicken
Den praktischen Einsatz dieser Funktionen zeigt Listing4. Es testet eine Implementierung von »QAbstractSpinBox«
, um Hexadezimalzahlen einzugeben (Abbildung3). Die Methode instanziert in Zeile9 das UI-Element. Komplexere Anwendungen bestehen aus mehr als einem Widget. Damit die Testfunktionen auch auf private Kinder des Hauptwidget zugreifen dürfen, verwenden Tester die Methoden »findChild()«
und »findChildren()«
. Die Klasse »TestMainWindow«
in den Beispielquellen nutzt diese Funktionen zum Test des Dateimenüs.
Die nachfolgenden Tests prüfen, ob der Anfangswert zunächst 0 und nach der Eingabe der Hex-Folge »A9«
tatsächlich dem Dezimalwert 169 entspricht. Der Druck auf die Pfeil-nach-oben-Taste erhöht ihn weiter auf 170.
Für den Test der Pfeiltasten am rechten Rand der Box kommt schließlich die Funktion »mouseClick()«
zum Einsatz, die hier auf die Taste mit dem Pfeil nach unten klickt. Da sich diese rechts unten in der Box befindet, lässt sich der Klickpunkt durch den Abzug weniger Pixel von der Breite und der Höhe berechnen. Nach dem Klick prüft Zeile17 wieder das Resultat. Das Listing schließt erneut mit dem Makro, das die Testklasse zur Anwendung wandelt.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 6 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





