C++ Unit Testing Beheersen met Catch2: Een Praktische Gids
Samenvatting
In dit artikel leg ik uit hoe u catch2 kunt gebruiken voor unit testing.
Hoe te Bouwen
Om de bronnen te bouwen, moet u een release downloaden van https://github.com/catchorg/Catch2/tags. Nu kunt u de bron compileren met gcc. De volgende code-snippet toont het cmake-script om te compileren.
# Stel de omgevingsvariabelen in naar uw behoeften
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
Integreren in Projectstructuur
Aanbevolen projectstructuur:
|-- project
|----CMakeLists.txt
|----test
|------cmake
|--------Catch.cmake
|--------CatchAddTests.cmake
|--------FindCatch2.cmake
|--------ParseAndAddCatchTests.cmake
|------Main.cpp
|------ExampleTest1.cpp
|------ExampleTest2.cpp
|------CMakeLists.txt
Instellingen in CMakeLists.txt van het project
include(CTest)
target_compile_definitions(${TARGET} PRIVATE TEST_DATA_PATH="${PROJECT_SOURCE_DIR}/data")
// zet omgevingsvariabele op ON als u testing wilt inschakelen
if (BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
Instellingen in CMakeLists.txt van de test-directory.
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 naar de gewenste bibliotheken
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})
Hoe te Gebruiken
Main.cpp
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
ExampleTest.cpp
Dit voorbeeld laat zien hoe u kunt testen met SCENARIOs.
#include <catch2/catch.hpp>
#ifndef DATA_PATH
#define DATA_PATH "/tmp/data"
#endif
SCENARIO("testcase", "") {
GIVEN("usercase 1") {
WHEN("instantie wordt aangemaakt") {
THEN("eigenschappen testen") {
// controleren of true
REQUIRE(...);
// controleren of geen exception
REQUIRE_NOTHROW(...);
}
}
}
}
ExampleTest2.cpp
Dit voorbeeld laat zien hoe u kunt testen met 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);
}
Speciale Opmerking voor PLCnext Applicaties
Om catch2 te gebruiken als testframework moet u ARP-inhoud uitsluiten. U moet uw code compileren met de lokale gcc-compiler. Met deze setup kunt u uw niet-ARP-code lokaal testen.
Meer Informatie
Als u geïnteresseerd bent in meer informatie over catch2, kunt u de volgende link bekijken:
Licentie
De bibliotheek is gepubliceerd onder Boost Software License 1.0.
Industriële technologie
- SaaS- en Cloudbeveiliging Versterken met Geautomatiseerde Tests en Prestatiemonitoring
- C++ operators: complete gids met praktische voorbeelden
- C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
- C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
- C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
- C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
- C++ Char Datatype: Declaratie, ASCII en Conversie‑Technieken
- C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden
- C++ Structs Uitgelegd met een Praktisch Voorbeeld
- Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
- C++ Functies Uitgelegd met Praktische Codevoorbeelden