C++-Tests mit catch2
Zusammenfassung
In diesem Artikel werde ich erklären, wie man catch2
verwendet Unit-Tests durchzuführen.
Wie man baut
Um die Quellen zu erstellen, müssen Sie eine Version von https://github.com/catchorg/Catch2/tags herunterladen. Jetzt können Sie den Quellcode mit gcc kompilieren. Das folgende Code-Snippet zeigt den cmake script
zu kompilieren.
#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
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")
//set environment variable to ON if you want to enable testing
if (BUILD_TESTING)
enable_testing()
add_subdirectory(test)
endif()
Einstellungen in CMakeLists.txt
des Testverzeichnisses.
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})
Verwendung
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")
{
//check if true
REQUIRE(...);
/check if no exception
REQUIRE_NOTHROW(...);
}
}
}
}
ExampleTest2.cpp
Dieses Beispiel zeigt, wie mit TEST_CASE
getestet wird .
#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 zu PLCnext-Anwendungen
Um catch2
zu verwenden Als Testframework 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 über catch2
interessiert sind Sie können den folgenden Link überprü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 mit Tests und Automatisierung hinzufügen
- C++-Operatoren
- C++ do…while-Schleife mit Beispielen
- C++ Switch Case-Anweisung mit BEISPIEL
- C++ Dynamische Zuordnung von Arrays mit Beispiel
- C++-Zeiger mit Beispielen
- C++ Char-Datentyp mit Beispielen
- Überladen von C++-Operatoren mit Beispielen
- C++-Struktur mit Beispiel
- std::list in C++ mit Beispiel