Maîtriser les tests unitaires C++ avec Catch2 : guide pratique
Résumé
Cet article explique comment utiliser catch2 pour faire des tests unitaires.
Comment compiler
Téléchargez une release depuis https://github.com/catchorg/Catch2/tags. Compilez les sources avec gcc. Le snippet ci-dessous montre le script cmake pour la compilation.
# Adaptez les variables d'environnement à vos besoins
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
Intégration dans la structure de 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
Réglages dans CMakeLists.txt du projet :
include(CTest)
target_compile_definitions(${TARGET} PRIVATE TEST_DATA_PATH="${PROJECT_SOURCE_DIR}/data")
// Mettre à ON pour activer les tests
if (BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
Réglages dans CMakeLists.txt du répertoire 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)
# Lier aux bibliothèques souhaitées
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>
ExampleTest.cpp
Exemple de test 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") {
// vérifier si vrai
REQUIRE(...);
// vérifier absence d'exception
REQUIRE_NOTHROW(...);
}
}
}
}
ExampleTest2.cpp
Exemple de test 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 pour applications PLCnext
Pour utiliser catch2 comme framework de test, il faut exclure le contenu ARP. Compilez votre code avec le compilateur gcc local. Avec cette configuration, vous pouvez tester votre code non-ARP localement.
Plus d'informations
Pour en savoir plus sur catch2 :
- GitHub : https://github.com/catchorg/Catch2
Licence
La bibliothèque est publiée sous Boost Software License 1.0.
Technologie industrielle
- Renforcer la sécurité SaaS et cloud avec tests automatisés et surveillance de performance
- Maîtriser les opérateurs C++ : Guide complet avec exemples pratiques
- Boucle do-while en C++ : Syntaxe, exemples pratiques et boucles imbriquées
- Maîtriser le switch-case en C++ : Syntaxe, utilisation et exemples pratiques
- Maîtriser l'allocation de tableaux dynamiques en C++ : Guide pratique avec exemples de code
- Maîtriser les pointeurs en C++ : Concepts, exemples et applications pratiques
- Maîtriser le type char en C++ : Déclaration, ASCII et techniques de conversion
- Surcharge d'opérateurs en C++ : Guide pratique avec exemples de code
- Les structures en C++ expliquées avec un exemple pratique