Frage

Ich bin eine GUI-Anwendung in Qt Creator entwickelt und will es einige Unit-Tests schreiben.

Ich folgte Dieses Handbuch einige Unit-Tests mit QtTestlib und dem Programm zu machen compiliert in Ordnung. Aber wie kann ich sie laufen? Ich möchte sie vor der GUI-Anwendung startet ausgeführt werden, wenn Debug buid und nicht, wenn Release-Build ausgeführt werden.

War es hilfreich?

Lösung 3

Schließlich herausgefunden, wie Tests laufen, bevor die App zu starten.

Ich habe eine statische Methode in der Klasse Tests, die Tests auszuführen:

#include <QtTest/QtTest>

TestClass::runTests()
{
    TestClass * test = new TestClass();

    QTest::qExec(test);
    delete test;
}

In der Hauptfunktion, tun:

int main(int argv, char *args[])
{
    ::TestsClas::runTests();

    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

Die Testergebnisse sind in der Anwendungsausgabefenster gedruckt.

Andere Tipps

Do Testcode nicht in Ihr Hauptprojekt setzen. Sie sollten ein eigenes Projekt für die Komponententests dann erstellen und auszuführen, dass erstellen. Sie nicht Ihr Hauptprojekt, um Tests ändern.

Idealerweise sollten Sie einen Build-Server, dass eingerichtet haben wird automatisch invoke Ihr Unit-Test-Projekt und Ihre Releases zu bauen. Sie können dieses Skript.

Sie nie Ihre Hauptanwendung hacken Ihre Unit-Tests laufen zu lassen. Wenn Sie benötigen, um die Integration Level-Tests zu tun (das heißt Test wie das Programm funktioniert, sobald es vollständig zusammengestellt und integriert), sollten Sie eine andere Integrationstestframework verwenden, die Ihnen das Programm von einer extern scripted Quelle zu testen. froglogic des Squish ist ein solcher Rahmen.

Verwenden Sie mehrere Ziele und Präprozessor Flags um dies zu erreichen:

int main(int argv, char *args[])
{
#ifdef TEST
    ::TestsClas::runTests();
#endif
    QApplication app(argv, args);
    MainWindow mainWindow;
    mainWindow.setGeometry(100, 100, 800, 500);
    mainWindow.show();

    return app.exec();
}

Gehen Sie dann in die Scheibe Projekte und fügen Sie ein neues Ziel „Test“ von „Debug“ duplizieren. Unter Build-Schritten, ein Argument ergänzen, dass Make ist

CXXFLAGS+=-DTEST

So ist der Test im Testziel enthalten ist, aber nicht die Debug oder Veröffentlichung Ziele.

Qt Creator noch nicht explizit unterstützt zu diesem Zeitpunkt Unit-Tests laufen (bis zu Qt Creator 2.0beta). Also zur Zeit müssen Sie die Tests manuell starten.

Wenn Sie ein Build-System wie cmake statt qmake verwenden, dann könnten Sie versuchen, die Unit-Tests automatisch als Teil des Build-Prozesses selbst laufen. Leider bin ich irgendeines Verfahrens nicht bewusst ist dies mit qmake zu tun. CMake wird von Qt Creator unterstützt, wenn auch nicht so gut wie Qmake.

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