2012-08-03 6 views
10

Tal vez me esté perdiendo algo, pero me parece realmente estúpido que el único tutorial proporcionado para el marco QtTest te haga probar la clase QString.QtTest Unit Testing, cómo agregar archivos de encabezado ubicados en otro proyecto?

El típico caso de uso para pruebas unitarias es ... probar las clases que escribió usted mismo, pero no hay mención de cómo hacer referencia a sus clases en un proyecto diferente para probar en el tutorial y Google también me ha fallado (y realmente dudo que copiar las clases de pegar sea una buena manera de hacerlo).

Incluso hojeé 3 libros diferentes de Qt sin mención de QtTest.

+0

Hacer clic derecho en un proyecto en QtCreator y hacer "Agregar archivos existentes" no ayuda? –

+0

No encuentra esos archivos cuando intenta #include, y sí se ha agregado a HEADERS en .pro –

+0

@JohnLotacs HEADERS es para los archivos de encabezado del proyecto actual. Para incluir fuente de terceros, etc., consulte mi respuesta a continuación. – AJG85

Respuesta

6

Se pueden añadir incluyen rutas de acceso a otros directorios de proyectos en el archivo .pro así:

INCLUDEPATH += <directory> 

entonces debería ser capaz de encontrar las cabeceras que va a incluir.

Editar: Basado en comentarios

Eso es otra historia. La referencia no definida generalmente significa que te falta una dependencia. Esto generalmente se puede resolver con una de dos cosas.

Lo más sencillo es incluir el archivo fuente que falta:

INCLUDEPATH += ../myotherproject/ 
SOURCES = main.cpp ../myotherproject/missingsource.cpp 

Quizás la mejor solución es exponer código reutilizable mediante la compilación como una biblioteca y vincular a ella. P.ej. a .DLL o .LIB en Windows y .SO o .A en Linux.

INCLUDEPATH += ../myotherproject/ 
win32:LIBS += ../myotherproject/linkme.lib 

nos muestras los errores específicos que está recibiendo?

+0

No funciona, todas las llamadas a función a los resultados de archivos incluidos en "referencia indefinida a ******" errores a pesar de que Qt Creator puede completar automáticamente esas funciones (lo que significa que está buscando las cabeceras) –

+0

@JohnLotacs See editar arriba, ese es un problema diferente. – AJG85

8

Sugiero que coloque todas las fuentes y encabezados que tanto el proyecto de su aplicación principal como el proyecto de prueba de su unidad necesitan en un solo archivo .pri (.pro include). Pon este archivo en el proyecto principal. Luego incluye este archivo en ambos proyectos.

Tenga en cuenta que cada vez que la adición de una nueva clase al proyecto principal, QtCreator añade automáticamente los SOURCES += y HEADERS += líneas al archivo .pro, pero desea que estén en el archivo .pri, por lo que necesita para moverlos después manualmente . Creo que no hay solución para decirle a QtCreator dónde colocarlos.


proyecto principal:

myproject.pro 
myproject.pri 
main.cpp 
someclass.h 
someclass.cpp 

myproject.pro:

QT += ... 
TARGET = ... 
... 

SOURCES += main.cpp  # "private" to this project 
include(myproject.pri) # needed in unit test 

myproject.pri:

SOURCES += someclass.cpp 
HEADERS += someclass.h 

proyecto de prueba

Unidad:

unittest.pro 
main.cpp 
test.h 
test.cpp 

unittest.Pro:

QT += ... 
TARGET = ... 
... 

SOURCES += main.cpp test.cpp 
HEADERS += test.h 

# include the classes from the main project: 
INCLUDEPATH += ../myproject/ 
include(../myproject/myproject.pri)