unit test google c++ unit-testing cross-platform code-coverage cppunit

google - c++ unit test



¿Cómo puedo medir la cobertura de la prueba CppUnit(en win32 y Unix)? (5)

Tengo una base de código muy grande que contiene pruebas unitarias extensas (usando CppUnit). Necesito averiguar qué porcentaje del código ejercen estas pruebas , y (idealmente) generar algún tipo de informe que me diga, por biblioteca o por archivo, qué parte del código se ejerció.

Aquí está el truco: esto tiene que ejecutarse completamente no deseado (eventualmente dentro de una compilación de integración continua), y tiene que ser multiplataforma (bueno, al menos WIN32 y * nix).

¿Alguien puede sugerir una herramienta o un conjunto de herramientas que pueden ayudarme a hacer esto? No puedo alejarme de CppUnit (ni me gustaría hacerlo, me gusta), pero de lo contrario estoy ansioso por escuchar las recomendaciones que pueda tener.

Aclamaciones,


Consulte nuestra herramienta de cobertura de prueba SD C ++ . Se puede obtener para GCC y para MSVC6.

Tiene una colección de datos de sonda baja, una buena visualización de los datos de cobertura superpuestos en su código y la generación completa de informes con acumulaciones de cobertura en los niveles de método / clase / archivo / directorio.

EDITAR: agosto de 2015: ahora es compatible con GCC5 y varios dialectos de MS a través de Visual Studio 2015. Para usar estas herramientas en Linux, necesitas Wine, pero allí las herramientas proporcionan scripts nativos de Linux y una UI basada en Linux / Java, por lo que la herramienta se siente como una herramienta Linux nativa allí.


Si puede usar GNU GCC como su compilador , entonces la herramienta gcov funciona bien. Es muy fácil automatizar por completo todo el proceso.


Creo que debería haber especificado el compilador, estamos usando gcc para Linux y MSVC 6 (sí, lo sé, es viejo, pero funciona (sobre todo) para nosotros) para WIn32.

Por ese motivo, gcov no funcionará para nuestras compilaciones de Win32 y Bullseye no funcionará para nuestras compilaciones de Linux.

Entonces, de nuevo, tal vez solo necesito cobertura en un sistema operativo ...


Si está utilizando la cadena de herramientas de GCC, gcov obtendrá estadísticas de fuente, funcional y de cobertura de sucursal. gcov funciona bien para MinGW y Cygwin. Esto le permitirá obtener estadísticas de cobertura y emitir un código fuente instrumentado que le permita visualizar el código no ejecutado.

Sin embargo, si realmente quieres salir del parque con bonitos informes, usar gcov junto con lcov es el camino a seguir. lcov le dará informes de barras con alcance a los archivos y directorios, estadísticas de cobertura funcional y búsqueda de archivos de código de color para mostrar la cobertura (verde significa ejecutado, rojo significa que no ...).

lcov es fácil en Linux, pero puede requerir algunos pirateo perl en Cygwin. Personalmente he tenido algunos problemas al ejecutar los scripts (lcov se implementa en Perl) en Windows. He conseguido una versión pirateada para trabajar, pero prevenido.

Otro enfoque es hacer el gcov emitir en Windows y hacer el procesamiento posterior de lcov en Linux, donde seguramente funcionará de la caja.


¿Qué herramienta debo usar?

Este artículo describe frustraciones de otros desarrolladores en busca de herramientas de cobertura de código C ++. La solución final del autor fue la cobertura de Bullseye .

Características de cobertura de Bullseye :

En cuanto a la integración continua, depende de la solución de CI que use, pero es probable que conecte los pasos de medición de la instrumentación / cobertura en el archivo de creación que utiliza para las pruebas automatizadas.

Probando Linux vs Windows?

Siempre que todas sus pruebas se ejecuten correctamente en ambos entornos, debería estar bien medir la cobertura en uno u otro. (Aunque Bullseye parece ser compatible con ambas plataformas ). Pero ¿por qué no haces construcciones de integración continua en ambos entornos? Si entrega a clientes en ambos entornos, entonces debe probar en ambos.

Por esa razón, parece que debe tener configurados dos servidores de compilación continua, uno para una compilación de Linux y otro para una compilación de Windows. Quizás esto se puede lograr fácilmente con algún software de virtualización como vmware o virtualbox . Puede que no necesite ejecutar métricas de cobertura de código en ambos sistemas operativos, pero definitivamente debe ejecutar las pruebas de unidad en ambos.