C++ Unit Testing mit Catch2 meistern: Praktischer Leitfaden
Zusammenfassung
In diesem Artikel erkläre ich, wie man catch2 für Unit-Tests verwendet.
Wie man baut
Um die Quellen zu bauen, müssen Sie ein Release von https://github.com/catchorg/Catch2/tags herunterladen. Nun können Sie den Quellcode mit gcc kompilieren. Der folgende Code-Snippet zeigt das cmake script zum Kompilieren.
# Bitte Umgebungsvariablen nach Bedarf setzen
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
In Projektstruktur integrieren
Empfohlene Projektstruktur:
|-- project
|----CMakeLists.txt
|----test
|------cmake
|--------Catch.cmake
|--------CatchAddTests.cmake
|--------FindCatch2.cmake
|--------ParseAndAddCatchTests.cmake
|------Main.cpp
|------ExampleTest1.cpp
|------ExampleTest2.cpp
|------CMakeLists.txt
Einstellungen in CMakeLists.txt des Projekts:
include(CTest)
target_compile_definitions(${TARGET} PRIVATE TEST_DATA_PATH="${PROJECT_SOURCE_DIR}/data")
// Umgebungsvariable auf ON setzen, wenn Tests aktiviert werden sollen
if (BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
Einstellungen in CMakeLists.txt des test-Verzeichnisses:
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)
# Mit gewünschten Bibliotheken verlinken
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})
Wie man verwendet
Main.cpp
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
ExampleTest.cpp
Dieses Beispiel zeigt, wie man mit SCENARIOS testet.
#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") {
// Prüfen ob true
REQUIRE(...);
// Prüfen ob keine Exception
REQUIRE_NOTHROW(...);
}
}
}
}
ExampleTest2.cpp
Dieses Beispiel zeigt, wie man mit TEST_CASE testet.
#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);
}
Besonderer Hinweis für PLCnext-Anwendungen
Um catch2 als Test-Framework zu verwenden, müssen Sie ARP-Inhalte ausschließen. Sie müssen Ihren Code mit dem lokalen gcc-Compiler kompilieren. Mit diesem Setup können Sie Ihren Nicht-ARP-Code lokal testen.
Weitere Informationen
Wenn Sie an weiteren Informationen zu catch2 interessiert sind, können Sie folgenden Link prüfen:
- GitHub: https://github.com/catchorg/Catch2
Lizenz
Die Bibliothek wird unter der Boost Software License 1.0 veröffentlicht.
Industrietechnik
- SaaS- und Cloud-Sicherheit durch automatisiertes Testing und Performance-Monitoring erhöhen
- C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
- C++ do‑while‑Schleife: Syntax, Praxisbeispiele und verschachtelte Schleifen
- C++ switch‑case meistern: Syntax, Einsatz und Praxisbeispiele
- C++ Dynamische Array‑Allokation: Praktischer Leitfaden mit Code‑Beispielen
- C++ Zeiger meistern: Konzepte, Beispiele & praktische Anwendungen
- C++ char‑Datentyp meistern: Deklaration, ASCII & Konvertierungstechniken
- C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
- C++ Structs erklärt mit praktischem Beispiel
- std::list in C++ meistern: Syntax, Funktionen & praktische Beispiele