Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Technologie industrielle

test c++ avec catch2

Résumé

Dans cet article, je vais vous expliquer comment utiliser catch2 faire des tests unitaires.

Comment construire

Pour construire les sources, vous devez télécharger une version depuis https://github.com/catchorg/Catch2/tags. Vous pouvez maintenant compiler la source avec gcc. L'extrait de code suivant affichera le cmake script à compiler.


#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

Intégration dans la structure du projet

Structure de projet recommandée :

|-- project
|----CMakeLists-txt
|----test
|------cmake
|--------Catch.cmake
|--------CatchAddTests.cmake
|--------FindCatch2.cmake
|--------ParseAndAddCatchTests.cmake
|------Main.cpp
|------ExampleTest1.cpp
|------ExampleTest2.cpp
|------CMakeLists.txt

Paramètres en CMakeLists.txt du projet


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

Paramètres en CMakeLists.txt du répertoire 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)

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

Comment utiliser

Main.cpp


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

ExempleTest.cpp

Cet exemple montre comment tester avec 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(...);

            }
        }
    }
}

ExempleTest2.cpp

Cet exemple montre comment tester avec 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 );

}

Note spéciale aux candidatures PLCnext

Pour utiliser catch2 en tant que cadre de test, vous devez exclure le contenu ARP. Vous devez compiler votre code avec le compilateur gcc local. Avec cette configuration, vous pouvez tester votre code non ARP localement.

Plus d'informations

Si vous souhaitez obtenir plus d'informations sur catch2 vous pouvez vérifier le lien suivant :

Licence

La bibliothèque est publiée sous Boost Software License 1.0


Technologie industrielle

  1. Ajouter la sécurité SaaS et cloud avec les tests et l'automatisation
  2. Opérateurs C++
  3. Boucle do…while C++ avec exemples
  4. Instruction C++ Switch Case avec EXAMPLE
  5. Allocation dynamique C++ de tableaux avec exemple
  6. Pointeurs C++ avec exemples
  7. Type de données Char C++ avec exemples
  8. Surcharge d'opérateur C++ avec des exemples
  9. Structure C++ avec exemple