Pregunta

estoy desarrollando una aplicación GUI de Qt Creator y quiere escribir algunas pruebas unitarias para ello.

Esta guía hacer algunas pruebas unitarias con QtTestlib y el programa compila bien. Pero ¿Cómo se ejecuta ellos? Me gustaría que se pueden ejecutar antes de la GUI se inicia aplicación en caso de depuración buid y se ejecuta si la liberación de construcción.

¿Fue útil?

Solución 3

Finalmente descubierto la manera de ejecutar las pruebas antes de iniciar la aplicación.

I añadió un método estático en la clase de pruebas para ejecutar las pruebas:

#include <QtTest/QtTest>

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

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

En la función principal, hacer:

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

Los resultados de la prueba se imprimen en la ventana de salida de la aplicación.

Otros consejos

No ponga el código de prueba en su proyecto principal. Debe crear un proyecto separado para las pruebas unitarias a continuación, crear y ejecutar eso. No modifique su proyecto principal para ejecutar las pruebas.

Lo ideal es que debe tener un servidor de compilación estableció que automáticamente invocar su proyecto de prueba de unidad y construir sus comunicados. Usted puede script esto.

Nunca hackear su aplicación principal para ejecutar las pruebas unitarias. Si lo que necesita hacer pruebas de nivel de integración (por ejemplo, pruebas de cómo funciona el programa una vez que esté completamente compilado e integrado) se debe utilizar un marco de integración diferentes pruebas que le permite probar el programa desde una fuente externa guión. de FrogLogic Squish es uno de esos marcos.

El uso de múltiples objetivos e indicadores del preprocesador para lograr esto:

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

A continuación, entrar en el panel de proyectos y añadir un nuevo objetivo "de prueba" mediante la duplicación de "depuración". Bajo pasos de generación, añadir un argumento para hacer esto es

CXXFLAGS+=-DTEST

De esta manera la prueba está incluida en el destino de la prueba, pero no los objetivos de depuración o la liberación.

Qt Creator todavía no admite explícitamente la ejecución de pruebas unitarias en este momento (hasta 2.0beta Qt Creator). Así que por el momento tendrá que empezar las pruebas manualmente.

Si está utilizando un sistema de construcción CMake como lugar de qmake entonces se podría tratar de ejecutar las pruebas unitarias de forma automática como parte del propio proceso de construcción. Por desgracia, no tengo conocimiento de ningún método para hacer esto con qmake. CMake es apoyado por Qt Creator, aunque no tan bien como qmake.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top