Open Source im professionellen Einsatz

Navigation durch Testfälle

Für die Ablaufsteuerung und den Wertevergleich innerhalb der Testfunktionen stellt die Klasse »QTest« einige Makros bereit. Die wichtigsten von ihnen, nämlich »QCOMPARE(tatsächlich, erwartet)« und »QVERIFY(Bedingung)« , vergleichen Werte. Das Makro »QVERFIY« erwartet eine Bedingung wie bei einem If-Statement. Im Fehlerfall gibt die Testanwendung die Nummer der Programmzeile des Makros aus, das fehlgeschlug. »QCOMPARE« gibt zusätzlich noch den tatsächlichen und den erwarteten Wert aus. Das hilft dabei, Fehler schneller zu identifizieren, spart manche »QDebug« -Anweisung und macht sich besonders bei den datengetriebenen Tests bemerkbar. Dort prüft der Testablauf eine Testbedingung nämlich oft mit mehreren Wertepaaren, sodass dann »QCOMPARE« die bessere Wahl darstellt.

Listing 1

Header für die erste Testklasse

01 #include <QObject>
02
03 class TestMemoryMapModel : public QObject
04 {
05   Q_OBJECT
06   private slots:
07     void addressRange();
08 };

Da viele Tests für einen erfolgreichen Durchlauf Randbedingungen erfordern, bietet Qt das Makro »QSKIP(Beschreibung, Modus)« an. Innerhalb einer Testfunktion stoppt der Aufruf von »QSKIP« das Ausführen der Funktion und markiert sie im Protokoll als übersprungen. Der Modus ist nur in den speziellen Slots und bei datengetriebenen Tests von Bedeutung. Bei letzteren überspringt »QSKIP« im Modus »SkipSingle« den aktuellen Datensatz und setzt die Funktion mit dem folgenden fort. Im Modus »SkipAll« bricht »QSKIP« alle folgenden Datensätze ab und springt zur folgenden Testfunktion.

In den oben genannten Spezialfunktionen sind die Auswirkungen von »QSKIP« gleichbedeutend mit einem Fehlschlag der Funktionen. Generell sollten Entwickler das Makro »QSKIP« nur dazu nutzen, um Fehlschläge bei unzureichenden Testvoraussetzungen zu vermeiden. Darunter fällt zum Beispiel eine fehlende Datenbankverbindung, die eigentlich für den Test nötig wäre.

Kalkulierte Fehler

Um bewusste oder unvermeidliche Fehler in der Implementation zu berücksichtigen, setzen Programmierer besser »QEXPECT_FAIL« ein. Der Aufruf des Makros vor einer Prüfanweisung wie »QCOMPARE« negiert ihr Ergebnis. Ein Fehlschlag der Prüfanweisung wird daher ein Erfolg und umgekehrt. Zusätzlich fügt die Testanwendung dem Testprotokoll für einen erwarteten Fehlschlag die Ausgabe »XFAIL« und für einen unerwarteten Erfolg »XPASS« hinzu. Der Einsatz des Makros »QEXPECT_FAIL« hilft daher nicht nur sich an Implementierungsdefizite zu erinnern, sondern definiert durch die erhaltene Prüfanweisung bereits den Sollzustand.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook