Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

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

  1. SaaS- en Cloudbeveiliging Versterken met Geautomatiseerde Tests en Prestatiemonitoring
  2. C++ operators: complete gids met praktische voorbeelden
  3. C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
  4. C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
  5. C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
  6. C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
  7. C++ Char Datatype: Declaratie, ASCII en Conversie‑Technieken
  8. C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden
  9. C++ Structs Uitgelegd met een Praktisch Voorbeeld
  10. Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
  11. C++ Functies Uitgelegd met Praktische Codevoorbeelden