Question

Je développe une application graphique dans Qt Creator et que vous voulez écrire des tests unitaires pour elle.

Je suivais Ce guide pour faire des tests unitaires avec QtTestlib et le programme compile très bien. Mais comment puis-je les dirige? Je les aime à exécuter avant l'application GUI démarre si buid de débogage et ne pas courir en cas de rejet de construction.

Était-ce utile?

La solution 3

Enfin compris comment exécuter des tests avant de commencer l'application.

J'ai ajouté une méthode statique dans la classe des tests pour exécuter les tests:

#include <QtTest/QtTest>

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

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

Dans la fonction principale, faites:

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();
}

Les résultats d'essai sont imprimés dans la fenêtre de sortie de l'application.

Autres conseils

Ne pas mettre le code de test dans votre projet principal. Vous devez créer un projet distinct pour vos tests unitaires puis construire et exécuter cela. Ne modifiez pas votre projet principal pour effectuer des tests.

Idéalement, vous devriez avoir un serveur de build mis en place qui appeler automatiquement votre projet de test unitaire et construire vos communiqués. Vous script peut cela.

Ne jamais pirater votre application principale pour exécuter vos tests unitaires. Si vous avez besoin de faire des tests de niveau d'intégration (à savoir tester comment le programme fonctionne une fois qu'il est entièrement compilé et intégré), vous devez utiliser un cadre de tests d'intégration différents qui vous permet de tester le programme à partir d'une source externe scénarisé. gargouillis de froglogic est un tel cadre.

Utilisez plusieurs cibles et indicateurs de préprocesseur pour y parvenir:

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();
}

Ensuite, allez dans le volet des projets et ajoutez une nouvelle cible « Test » en dupliquant « Debug ». Sous étapes de construction, ajouter un argument à faire ce qui est

CXXFLAGS+=-DTEST

De cette façon, le test est inclus dans la cible de test, mais pas le Debug ou Release cibles.

Qt Creator ne supporte pas encore explicitement les tests unitaires en cours d'exécution à ce moment (jusqu'à Qt Creator 2.0Beta). Donc, pour le moment, vous devrez démarrer les tests manuellement.

Si vous utilisez un système de construction comme CMake au lieu de qmake alors vous pouvez essayer d'exécuter les tests unitaires automatiquement dans le cadre du processus de construction lui-même. Malheureusement, je ne suis pas au courant d'aucune méthode pour le faire avec qmake. CMake est pris en charge par le créateur de Qt, mais pas aussi bien que qmake.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top