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 :
- GitHub :https://github.com/catchorg/Catch2
Licence
La bibliothèque est publiée sous Boost Software License 1.0
Technologie industrielle
- Ajouter la sécurité SaaS et cloud avec les tests et l'automatisation
- Opérateurs C++
- Boucle do…while C++ avec exemples
- Instruction C++ Switch Case avec EXAMPLE
- Allocation dynamique C++ de tableaux avec exemple
- Pointeurs C++ avec exemples
- Type de données Char C++ avec exemples
- Surcharge d'opérateur C++ avec des exemples
- Structure C++ avec exemple