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

prueba c++ con catch2

Resumen

En este artículo explicaré cómo usar catch2 para hacer pruebas unitarias.

Cómo construir

Para compilar las fuentes, debe descargar una versión de https://github.com/catchorg/Catch2/tags. Ahora puedes compilar la fuente con gcc. El siguiente fragmento de código mostrará el cmake script para compilar.


#Please set the environment variables to your needs cmake \ -G "Unix Malkefiles" \ -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 la estructura del 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")

//set environment variable to ON if you want to enable testing
if (BUILD_TESTING)
    enable_testing()
    add_subdirectory(test)
endif()

Configuración en CMakeLists.txt del directorio de prueba.


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)

# Link to the desired libraries
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

Principal.cpp


#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>

EjemploPrueba.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")
            {

                //check if true
                REQUIRE(...);

                /check if no exception
                REQUIRE_NOTHROW(...);

            }
        }
    }
}

EjemploPrueba2.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 las aplicaciones PLCnext

Para usar catch2 como marco de prueba, debe excluir el contenido ARP. Tienes que compilar tu 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 puedes consultar el siguiente enlace:

Licencia

La biblioteca se publica bajo la licencia de software Boost 1.0


Tecnología Industrial

  1. Agregue SaaS y seguridad en la nube con pruebas y automatización
  2. Operadores de C++
  3. C++ do...while bucle con ejemplos
  4. Declaración de caso de cambio de C ++ con EJEMPLO
  5. C++ Asignación dinámica de arreglos con ejemplo
  6. Punteros de C++ con ejemplos
  7. Tipo de datos Char de C++ con ejemplos
  8. Sobrecarga de operadores de C++ con ejemplos
  9. Estructura C++ con ejemplo
  10. std::list en C++ con ejemplo
  11. Funciones de C++ con ejemplos de programas