Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Industrietechnik

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:

Lizenz

Die Bibliothek wird unter der Boost Software License 1.0 veröffentlicht.

Industrietechnik

  1. SaaS- und Cloud-Sicherheit durch automatisiertes Testing und Performance-Monitoring erhöhen
  2. C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
  3. C++ do‑while‑Schleife: Syntax, Praxisbeispiele und verschachtelte Schleifen
  4. C++ switch‑case meistern: Syntax, Einsatz und Praxisbeispiele
  5. C++ Dynamische Array‑Allokation: Praktischer Leitfaden mit Code‑Beispielen
  6. C++ Zeiger meistern: Konzepte, Beispiele & praktische Anwendungen
  7. C++ char‑Datentyp meistern: Deklaration, ASCII & Konvertierungstechniken
  8. C++ Operator‑Overloading: Praktischer Leitfaden mit Code‑Beispielen
  9. C++ Structs erklärt mit praktischem Beispiel
  10. std::list in C++ meistern: Syntax, Funktionen & praktische Beispiele