Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Tecnologia industrial

teste c++ com catch2

Resumo


Neste artigo vou explicar como usar catch2 para fazer testes unitários.

Como construir


Para construir as fontes, você precisa baixar uma versão de https://github.com/catchorg/Catch2/tags. Agora você pode compilar a fonte com gcc. O seguinte trecho de código mostrará o cmake script 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

Integre na estrutura do projeto


Estrutura de projeto recomendada:
|-- project
|----CMakeLists-txt
|----test
|------cmake
|--------Catch.cmake
|--------CatchAddTests.cmake
|--------FindCatch2.cmake
|--------ParseAndAddCatchTests.cmake
|------Main.cpp
|------ExampleTest1.cpp
|------ExampleTest2.cpp
|------CMakeLists.txt

Configurações em CMakeLists.txt do projeto

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()


Configurações em CMakeLists.txt do diretório de teste.

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}) 

Como usar


Main.cpp

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


ExampleTest.cpp

Este exemplo mostra como testar com 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(...);

            }
        }
    }
}


ExampleTest2.cpp

Este exemplo mostra como testar com 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 aplicações PLCnext


Para usar catch2 como estrutura de teste, você deve excluir o conteúdo ARP. Você precisa compilar seu código com o compilador gcc local. Com esta configuração, você pode testar seu código não ARP localmente.

Mais informações


Se você estiver interessado em obter mais informações sobre catch2 você pode verificar o seguinte link:

Licença


A biblioteca é publicada sob Boost Software License 1.0

Tecnologia industrial

  1. Adicionar SaaS e segurança em nuvem com teste e automação
  2. Operadores C++
  3. C++ do… while loop com exemplos
  4. Instrução C++ Switch Case com EXEMPLO
  5. Alocação dinâmica de matrizes em C++ com exemplo
  6. Ponteiros C++ com exemplos
  7. Tipo de dados C++ Char com exemplos
  8. Sobrecarga do operador C++ com exemplos
  9. Estrutura C++ com exemplo
  10. std::list em C++ com exemplo