Dominar pruebas unitarias en C++ con Catch2: Guía práctica
Resumen
En este artículo explicaré cómo usar catch2 para hacer pruebas unitarias.
Cómo compilar
Para compilar las fuentes, debe descargar una release desde https://github.com/catchorg/Catch2/tags. Ahora puede compilar la fuente con gcc. El siguiente fragmento de código mostrará el script cmake para compilar.
# Por favor, establezca las variables de entorno según sus necesidades
cmake \
-G "Unix Makefiles" \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_TESTING=OFF \
-D BUILD_SHARED_LIBS=ON \
-D "CMAKE_STAGING_PREFIX=${CMAKE_STAGING_PREFIX}" \
-D "CMAKE_INSTALL_PREFIX=${CMAKE_STAGING_PREFIX}" \
-D BUILD_TESTS=OFF \
-S "${SOURCE_DIRECTORY}" \
-B "${BUILD_DIRECTORY}"
cmake --build "${BUILD_DIRECTORY}" --target install
Integrar en estructura de proyecto
Estructura de proyecto recomendada:
|-- project
|----CMakeLists.txt
|----test
|------cmake
|--------Catch.cmake
|--------CatchAddTests.cmake
|--------FindCatch2.cmake
|--------ParseAndAddCatchTests.cmake
|------Main.cpp
|------ExampleTest1.cpp
|------ExampleTest2.cpp
|------CMakeLists.txt
Configuración en CMakeLists.txt del proyecto
include(CTest)
target_compile_definitions(${TARGET} PRIVATE TEST_DATA_PATH="${PROJECT_SOURCE_DIR}/data")
// establecer variable de entorno a ON si quiere habilitar pruebas
if (BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
Configuración en CMakeLists.txt del directorio de test.
cmake_minimum_required(VERSION 3.13)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/test/cmake")
set (WILDCARD_SOURCE *.cpp)
file(GLOB_RECURSE TEST_SOURCES ${WILDCARD_SOURCE})
add_executable(${TARGET_TEST} ${TEST_SOURCES})
find_package(Catch2 REQUIRED)
# Enlazar a las bibliotecas deseadas
target_link_libraries(${TARGET_TEST} PRIVATE Catch2::Catch2 ... )
target_compile_definitions(DcmlParserTest PRIVATE TEST_DATA_PATH="${PROJECT_SOURCE_DIR}/data")
include(ParseAndAddCatchTests)
ParseAndAddCatchTests(${TARGET_TEST})
Cómo usar
Main.cpp
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
ExampleTest.cpp
Este ejemplo muestra cómo probar con SCENARIOS.
#include <catch2/catch.hpp>
#ifndef DATA_PATH
#define DATA_PATH "/tmp/data"
#endif
SCENARIO("testcase", "") {
GIVEN("usercase 1") {
WHEN("instance is created") {
THEN("test properties") {
// verificar si true
REQUIRE(...);
// verificar si no hay excepción
REQUIRE_NOTHROW(...);
}
}
}
}
ExampleTest2.cpp
Este ejemplo muestra cómo probar con TEST_CASE.
#include <catch2/catch.hpp>
#ifndef DATA_PATH
#define DATA_PATH "/tmp/data"
#endif
TEST_CASE( "TestCase1", "" ) {
REQUIRE( 1 == 1 );
}
TEST_CASE( "Testcase2", "" ) {
REQUIRE( 3 != 1 );
}
Nota especial para aplicaciones PLCnext
Para poder usar catch2 como framework de pruebas, tiene que excluir contenido ARP. Tiene que compilar su código con el compilador gcc local. Con esta configuración puede probar su código no-ARP localmente.
Más Información
Si está interesado en obtener más información sobre catch2 puede consultar el siguiente enlace:
Licencia
La biblioteca está publicada bajo Boost Software License 1.0.
Tecnología Industrial
- Mejore la seguridad SaaS y cloud con pruebas automatizadas y monitorización de rendimiento
- Dominando los Operadores en C++: Guía Completa con Ejemplos Prácticos
- Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
- Dominando switch-case en C++: Sintaxis, uso y ejemplos prácticos
- Asignación dinámica de arrays en C++: Guía práctica con ejemplos de código
- Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
- Dominando el tipo de dato char en C++: Declaración, ASCII y técnicas de conversión
- Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
- Structs en C++ explicados con un ejemplo práctico
- Dominar std::list en C++: Sintaxis, Funciones y Ejemplos Prácticos
- Funciones en C++ Explicadas con Ejemplos de Código Prácticos