Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Tecnología Industrial

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

  1. Mejore la seguridad SaaS y cloud con pruebas automatizadas y monitorización de rendimiento
  2. Dominando los Operadores en C++: Guía Completa con Ejemplos Prácticos
  3. Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
  4. Dominando switch-case en C++: Sintaxis, uso y ejemplos prácticos
  5. Asignación dinámica de arrays en C++: Guía práctica con ejemplos de código
  6. Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
  7. Dominando el tipo de dato char en C++: Declaración, ASCII y técnicas de conversión
  8. Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
  9. Structs en C++ explicados con un ejemplo práctico
  10. Dominar std::list en C++: Sintaxis, Funciones y Ejemplos Prácticos
  11. Funciones en C++ Explicadas con Ejemplos de Código Prácticos