¡Descubre GoogleTest, con certificación TÜV y la tecnología Agentic AI para pruebas de C/C++!
Obtenga los detalles »
Blog de Parasoft
¿Alguna vez se preguntó cómo puede usar Parasoft C/C++test con CMake para pruebas unitarias? Echa un vistazo a esta publicación para saber cómo.
Saltar a la sección
La versión C/C++test 2020.1 introdujo la capacidad de integrar C/C++test con CMake para análisis estático y pruebas unitarias. Esta publicación se centra en cómo usar Parasoft C/C++test con proyectos basados en CMake para realizar pruebas unitarias.
Las pruebas unitarias son más complicadas de integrar en el proceso de desarrollo que el análisis estático. Al final, se debe crear el archivo binario ejecutable. Esto es especialmente problemático para proyectos grandes y complejos que se componen de múltiples bibliotecas y ejecutables.
El archivo JSON de información de compilación, que usamos para el análisis estático, no es suficiente. No proporciona la información importante sobre la estructura del proyecto: qué archivos se incluyen en qué binarios y qué deben probarse juntos.
Para facilitar la integración de las pruebas unitarias de Parasoft C/C++test en proyectos basados en CMake, la versión 2020.1 introduce una extensión de CMake que permite definir objetivos de pruebas unitarias para C/C++test . Estos objetivos generan automáticamente los archivos de proyecto de C/C++test que se pueden usar para crear, ejecutar y mantener las pruebas unitarias.
La intención de esta extensión es permitir a los usuarios definir toda la infraestructura necesaria para las pruebas de unidades de prueba de Parasoft C / C ++ junto con sus objetivos habituales en los archivos de configuración de CMake.
Veamos cómo funciona con un ejemplo de prueba unitaria usando C/C++test Professional, una herramienta basada en Eclipse con una interfaz de usuario intuitiva. Descarga e instala la versión 2020.1, si aún no lo has hecho.
En el directorio de instalación principal de C / C ++ test Professional, puede encontrar la extensión CMake con un ejemplo adjunto. Consulte el siguiente directorio: integración / cmake.
Para nuestros experimentos, recomiendo copiar la carpeta de integración / cmake de la instalación a su ubicación preferida. La estructura del ejemplo se muestra a continuación:
La carpeta app contiene el archivo ejecutable. La carpeta modules, con sus tres subcarpetas (mod1, mod2 y mod3), representa las bibliotecas estáticas que se utilizan para enlazar con el ejecutable. Además, la carpeta cmake contiene la extensión C/C++test de CMake. Puede copiar esta carpeta a su proyecto real para usar esta extensión.
Esta estructura simplificada pinta una imagen de los desafíos típicos que enfrentan los equipos que intentan implementar las pruebas unitarias: Cómo dividir todo el proyecto en partes probables, que representan grupos de archivos que lógicamente pertenecen juntos.
En la mayoría de los casos, los desarrolladores no querrán ejecutar pruebas unitarias contra un binario blob creado mediante la compilación de todos los archivos de un proyecto completo. Lo más probable es que los usuarios estén interesados en agregar los casos de prueba para los mismos destinos binarios (ejecutables y bibliotecas) que han definido en el proyecto.
Antes de discutir los detalles de la sintaxis de configuración, veamos cómo funciona usando el ejemplo proporcionado.
1. En el directorio de nivel superior donde se encuentra la carpeta de la aplicación, cree un directorio de compilación, acceda a él con el comando cd y llame a la generación de scripts de compilación, como se muestra a continuación:
2. Una vez que CMake haya terminado de generar los scripts de compilación (makefiles), llame a make para compilar el proyecto de ejemplo:
3. Inicie C/C++test professional (el ejecutable cpptest en la carpeta de instalación). Seleccione un espacio de trabajo vacío, use el menú Archivo -> Importar … -> Proyectos existentes en el espacio de trabajo y seleccione la carpeta raíz como la carpeta principal donde copió el ejemplo. El asistente escaneará recursivamente la carpeta seleccionada y encontrará todos los proyectos generados automáticamente. Si ve algo similar a lo que se muestra a continuación, puede hacer clic en "Finalizar".
Eclipse importará todos los proyectos y tendrá un nuevo espacio de trabajo listo para las pruebas unitarias. No tiene que hacer nada más para comenzar a agregar y ejecutar los casos de prueba y trabajar para mejorar la cobertura de su código.
4. En el navegador de proyectos, seleccione los tres proyectos, haga clic con el botón derecho y utilice la configuración de prueba "Parasoft -> Probar con -> Integrado -> Pruebas unitarias -> Generar pruebas unitarias" para generar automáticamente los casos de prueba. Una vez generadas las pruebas, ejecute la configuración "Ejecutar pruebas unitarias" desde la misma ubicación.
Con estos simples cuatro pasos, preparó la infraestructura del proyecto para las pruebas unitarias. El equipo ahora está listo para comenzar a procesar los casos de prueba.
Además de los objetivos de compilación habituales, los archivos CMakeLists.txt contienen objetivos de pruebas unitarias. Al generar los scripts de compilación con cmake, los archivos de proyecto de prueba de C / C ++ también se generan automáticamente. Más adelante, durante el proceso de compilación, se generan automáticamente archivos de datos de compilación adicionales, que son necesarios para los proyectos de prueba de C / C ++.
Todo lo que se necesita para definir la estructura de los proyectos de pruebas unitarias se guarda dentro de los archivos CMakeLists.txt. El equipo no necesita mantener ningún archivo de configuración adicional. Todo es lindo y limpio. El proyecto se puede verificar, construir scripts y proyectos de prueba C / C ++, se pueden agregar y registrar pruebas junto con el código fuente, y se pueden realizar pruebas completas en el CI.
Echemos un vistazo más de cerca a la extensión CMake de prueba de C / C ++ y cómo ayuda a definir la infraestructura de los proyectos de prueba. Abra el archivo modules / mod1 / CMakeLists.txt. Debería ver algo como a continuación:
En las primeras seis líneas, puede ver la definición de destino normal. Aquí estamos definiendo un destino de biblioteca simple, con un archivo fuente mod1.cpp y un directorio de archivos de inclusión. Esto es lo que normalmente verá en sus proyectos de CMake.
En la línea 11, sin embargo, tenemos una nueva función CMake que se proporciona con la extensión de prueba C / C ++. Esta función le permite definir el objetivo de la prueba unitaria, que genera todos los archivos de proyecto de prueba C / C ++ requeridos. Puede encontrar la descripción completa de esta función en integrations / cmake / README.md. En este ejemplo específico, se hace lo siguiente:
Esta simple definición de destino es suficiente para generar un proyecto de prueba unitaria para la prueba Parasoft C / C ++. Los archivos de proyecto se generarán en la ubicación del archivo CMakeLists.txt, que probablemente sea el más conveniente. Si lo prefiere, puede generar los archivos del proyecto fuera del árbol de origen y evitar problemas de fusión. Esto se muestra en app / CMakeLists.txt:
Para obtener más detalles, revise los siguientes archivos de la / integrations / cmake directorio:
Estos son los puntos importantes sobre la extensión.