2009-09-17 13 views
7

¿Alguien ha utilizado un paquete como CppUnit para realizar pruebas de unidad C++ de compilación cruzada para ejecutar en una plataforma incrustada?Pruebas de unidades de compilación cruzadas con CppUnit o similar

Estoy usando G ++ en una caja de Linux para compilar ejecutables que deben ejecutarse en una placa LynxOS. Parece que no puedo obtener ninguno de los paquetes de pruebas unitarias comunes para configurar y crear algo que creará pruebas unitarias.

Veo muchos paquetes de pruebas unitarias, CppUnit, UnitTest ++, GTest, CppUest, etc., pero muy poco sobre el uso de estos paquetes en un escenario de compilación cruzada. Los que tienen un script "configurar" implican que esto es posible, pero parece que no puedo configurarlos y compilarlos.

+0

Im usando CppUnit en Windows y Linux en un proyecto de compilación cruzada. Sin problemas en absoluto. ¿Cuáles son tus problemas exactos? – tauran

Respuesta

2

Es posible que desee consultar CxxTest. No lo he usado para la compilación cruzada, pero está basado completamente en encabezados y una secuencia de comandos de Python, no hay una biblioteca compilada. Puede ser más fácil de adaptar que otros.

2

Mi práctica cuando el código de pruebas unitarias es compilado cruzado es compilar las pruebas unitarias usando la cadena de herramientas nativa, usualmente algo del compilador x86. Estas pruebas unitarias se ejecutan en la máquina de construcción en lugar de en el objetivo integrado. Si está escribiendo pruebas unitarias estrictas (a diferencia de las pruebas de integración) con stubs y burlas, no debería tener dependencias en el hardware incrustado. Si no ... nunca es demasiado tarde para comenzar.

Un beneficio adicional de este enfoque es que para los objetivos incrustados x86, este tipo de pruebas unitarias ayuda a resolver problemas de endianness, variables no inicializadas y otros errores interesantes.

0

No proporciono una respuesta aquí, pero no tomaría el consejo de NO ejecutar las pruebas de su unidad en diferentes objetivos: aún debe hacerlo, preferiblemente las pruebas tanto del sistema como de la unidad.

De lo contrario, cosas simples como errores de alineación en ARM/otras CPU integradas no quedarán atrapadas.

0

Parece que necesita tener una biblioteca de pruebas unitarias compilada para su sistema operativo y arquitectura, así como también lo que hay en su (s) máquina (s) de desarrollo/desarrollo. Prefiero el marco de prueba de la unidad Boost ++ para esto. Puede descargar algo previamente creado para su arquitectura, pero generalmente tendrá que compilarlo usted mismo. Encontré algunas soluciones buscando en Google cómo aumentar la compilación cruzada (por ejemplo, http://goodliffe.blogspot.com/2008/05/cross-compiling-boost.html). CppUnit podría ser más fácil de compilación cruzada, no lo ha intentado. El principio general es la misma, se compila la misma versión de la biblioteca para su arquitectura de desarrollo y para su equipo de destino

Mi configuración de nuevos objetivos es compilar el impulso necesario ++ bibliotecas para mi objetivo OS/arco y luego escribir pruebas para vincular contra las bibliotecas de Boost ++ y el código que se probará.

La ventaja es que puede enlazar con sus libs de x86 Linux Boost ++ o contra sus libs de Boost ++, así puede ejecutar las pruebas tanto en su destino como en su (s) máquina (s) de desarrollo/desarrollo.

Mi configuración general es el siguiente:

libs/boost/<arch>/<boost libs> 
src/foo.{cpp,h} 
tests/test_foo.cpp 
build/foo 
build/test_foo.<arch> 

me puso compilado Boost bibliotecas ++ en diferentes arquitecturas que necesito en libs/dir para todos mis proyectos y de referencia aquellas librerías en mi Makefile. La fuente y las pruebas se construyen con una variable de arco especificada para ordenar de esa forma puedo ejecutar test_foo.x86 en mi máquina de desarrollo y test_foo. {Arm, mips, ppc, etc.} en mis objetivos.

3
./configure --prefix=/sandBox --build=`config.guess` --host=sh4-linux 

sh4-linux es la plataforma en la que desea ejecutar el programa.

0

Para compilar de forma cruzada CppUTest (v3.3), tuve que anular las variables de creación LD, CXX y CC.

Para obtener tanto el CppUTest y CppUTestExt (por CppUMock) las bibliotecas y sus pruebas construidas que utilizan los siguientes comandos desde el directorio CPPUTEST_HOME:

Para construir libCppUTest.a:

make all LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

Para construir libCppUTestExt .a (por CppUMock):

make extensions LD=sh4-linux-g++ CXX=sh4-linux-g++ CC=sh4-linux-gcc 

a continuación, puede copiar los CppUTest_tests y CppUTestExt_tests ejecutables que se producen en su CPPUTEST_HOME a su dispositivo de destino y ejecutarlos allí.

Suponiendo que CppUTest aprueba sus propias pruebas en su objetivo, está listo para desarrollar sus pruebas con CppUTest. Simplemente vincule su código de prueba con las bibliotecas compiladas CppUTest y copie el ejecutable resultante en su destino. Luego ejecute para obtener los resultados de la prueba unitaria de la plataforma de destino en sí.

Cuestiones relacionadas