Hace poco convertí mi sistema de compilación a automake/autoconf. En mi proyecto, tengo algunas pruebas unitarias que necesitan algunos archivos de datos de entrada en el directorio desde donde se ejecutan. Cuando ejecuto make distcheck y prueba la compilación de VPATH, estas pruebas fallan porque aparentemente no se ejecutan desde el directorio donde están los archivos de entrada. Me preguntaba si hay alguna solución rápida para esto. Por ejemplo, ¿de alguna manera puedo decirle al sistema que no ejecute estas pruebas en make distcheck (pero aún las ejecute en make check)? O para cd al directorio donde están los archivos antes de ejecutar las pruebas?make distcheck y pruebas que necesitan archivos de entrada
Respuesta
La solución típica es escribir las pruebas para que busquen en el directorio fuente los archivos de datos. Por ejemplo, puede hacer referencia al $srcdir
en la prueba o convertir test
en test.in
y consultar @[email protected]
.
Si las pruebas están en el directorio de origen, puede ejecutar todas las pruebas de ese directorio mediante el establecimiento de TESTS_ENVIRONMENT en Makefile.am:
TESTS_ENVIRONMENT = cd $(srcdir) &&
Este fallará si algunos de sus pruebas son creados por configure y por lo tanto vivir sólo en el directorio de construcción, en cuyo caso se puede evitar selectivamente cd con algo como:
TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } &&
intentando utilizar TESTS_ENVIRONMENT como esto es frágil en el mejor, y lo mejor sería escribir las pruebas para que se mira en la fuente calamitosa ctory para los archivos de datos.
Tuve el mismo problema y utilicé una solución similar a la de William. Mi Makefile.am es como la siguiente:
EXTRA_DIST = testdata/test1.dat
AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"
Entonces, en mi unittest, utilizo el DATADIR definir:
string path = DATADIR "/testdata/test1.dat"
Esto funciona con make check
y make distcheck
.
- 1. Pruebas unitarias con elementos que necesitan enviar encabezados
- 2. ¿Qué archivos copiaron `make install` y dónde?
- 3. Entrada de archivos y Dart
- 4. BSD Make y GNU Make makefile compatible
- 5. Variables automáticas en las pruebas de condicionales: GNU Make
- 6. ¿Los archivos MAKE están completos?
- 7. C++: dos clases que se necesitan
- 8. HTML - campo de entrada de make seleccionable pero no modificable
- 9. Pruebas unitarias con un archivo de entrada
- 10. ¿Buffer de entrada y salida predeterminado para archivos fopen'd?
- 11. CRealice e incluyendo otros archivos make
- 12. Compila múltiples archivos C con make
- 13. fichero Make: compilar todos los archivos .cpp a .o archivos
- 14. Implementando `make check` o` make test`
- 15. Evite la recompilación con git y make
- 16. CMake cómo instalar archivos de prueba con pruebas unitarias
- 17. MSTest: Pruebas unitarias - Archivo de entrada no encontrado ... vsmdi
- 18. C++: ¿funciones virtuales que necesitan llamar al mismo código?
- 19. Colón y $ en el archivo MAKE
- 20. Incluyendo bibliotecas de impulso en los archivos de make
- 21. ¿Se necesitan realmente scala.util.automata, scala.util.regexp y scala.util.grammar?
- 22. CMake: cómo determinar todos los archivos .DLL/.SO que se necesitan para un ejecutable?
- 23. Creando varios archivos de encabezado precompilados utilizando GNU make
- 24. ¿Alguna buena herramienta para la generación de archivos MAKE?
- 25. Pregunta muy básica sobre Hadoop y archivos de entrada comprimidos
- 26. GNU de make
- 27. ¿Paradigmas de interfaz de usuario que necesitan cambios?
- 28. Cómo incluir archivos de encabezado a través del archivo MAKE
- 29. Escritura de pruebas para archivos de script en F #
- 30. .NET Tareas de programación que necesitan derechos de administrador local
Mis pruebas están en src/some/path y los archivos de datos están en el mismo directorio. He intentado el TESTS_ENVIRONMENT = cd $ (srcdir) && truco pero no funcionó porque ahora no encuentra el ejecutable de la prueba más. Copiar los archivos de datos necesarios en el directorio actual tampoco funciona porque, en una compilación de VPATH, aparentemente no tiene permisos de escritura en el directorio donde se ejecutan las pruebas. –
@Martin, no tiene acceso de escritura al directorio de origen, pero sí tiene acceso de escritura al directorio de compilación. ¿Cómo está copiando el archivo? Simplemente agregue 'EXTRA_DIST = datafile' a Makefile.am y' cp $ {srcdir}/datafile .' en test.in debería funcionar. Sin embargo, si la prueba se está ejecutando desde el directorio de origen, entonces el intento de copia fallará debido a los permisos de escritura. Sospecho que tiene algunas pruebas que se ejecutan desde el directorio de compilación y algunas que se ejecutan desde el directorio de origen. (Las pruebas denominadas '* .in' se ejecutan (probablemente) desde el directorio de compilación, mientras que otras pruebas se ejecutan desde el directorio de origen). –
Esto se veía exactamente como lo que estaba buscando, pero esto no parece funcionar con Automake 1.15, desafortunadamente: con esto, crea archivos '* .log' y' * .trs' en el directorio fuente (que ya está dañado), pero aún los busca en el directorio de compilación y, por supuesto, no encuentra ellos allí (que es fatal). –