2010-05-11 15 views
5

Estoy desarrollando una aplicación GUI en Qt Creator y quiero escribir algunas pruebas de unidad para ella.Cómo ejecutar las pruebas de la unidad qtestlib desde QtCreator

que siguieron This guide hacer algunas pruebas unitarias con QtTestlib y el programa compila bien. ¿Pero cómo puedo ejecutarlos? Me gustaría que se ejecuten antes de que se inicie la aplicación de la GUI si se depura la depuración y no se ejecuta si la versión del lanzamiento.

Respuesta

4

Finalmente descubrimos cómo ejecutar pruebas antes de iniciar la aplicación.

I añaden uno 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(); 
} 

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

+7

No desea contaminar la aplicación principal con el código de prueba. – jkyle

2

Qt Creator todavía no admite explícitamente la ejecución de pruebas unitarias en este momento (hasta 2.0beta Qt Creator). Entonces, por el momento, deberá comenzar las pruebas de forma manual.

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. Lamentablemente, no conozco ningún método para hacer esto con qmake. CMake es compatible con el creador de Qt, aunque no tan bien como qmake.

+0

Personalmente, encuentro que el soporte de cmake es bastante bueno. Incluso uso CTEST para ejecutar por lotes las clases de prueba de mi unidad QTEST a través de Creator. en una configuración de compilación personalizada. – jkyle

18

No coloque código de prueba en su proyecto principal. Debe crear un proyecto separado para las pruebas de su unidad y luego compilar y ejecutar eso. No modifique su proyecto principal para ejecutar pruebas.

Idealmente, debe tener un servidor de compilación configurado que invocará automáticamente su proyecto de prueba de unidad y compilará sus lanzamientos. Puedes guiar esto.

Nunca piratear su aplicación principal para ejecutar sus pruebas unitarias. Si necesita realizar pruebas de nivel de integración (es decir, probar cómo funciona el programa una vez que está completamente compilado e integrado) debe usar un marco de prueba de integración diferente que le permita probar el programa desde una fuente con guiones externos. FrogLogic's Squish es uno de esos marcos.

+0

Hola James. Digamos que tengo una aplicación con muchos elementos menulistas. Cada elemento del menú cuando se hace clic muestra un formulario. ¿Cómo hago una prueba de unidad que haga clic en cada elemento de la lista de menú y compruebe si se muestra la forma correcta? – Owen

+3

No puede hacer una prueba unitaria para eso. Necesitas algo como Squish de FrogLogic para hacer ese tipo de pruebas integradas. Las pruebas unitarias son mucho más bajas que las pruebas UI. Al menos esa es la forma en que lo entiendo que funciona.Si encuentras que puedes hacer este tipo de cosas, me encantaría saber, pero todo lo que leí dijo que este es un uso indebido de las pruebas unitarias. –

5

Use objetivos múltiples y banderas del preprocesador para lograrlo:

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

y luego 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 esa manera la prueba está incluida en el destino de la prueba, pero no la depuración o Release objetivos.

Cuestiones relacionadas