Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Teknologi Industri

pengujian c++ dengan catch2

Abstrak

Pada artikel ini saya akan menjelaskan cara menggunakan catch2 untuk melakukan pengujian unit.

Cara membangun

Untuk membangun sumber, Anda harus mengunduh rilis dari https://github.com/catchorg/Catch2/tags. Sekarang Anda dapat mengkompilasi sumber dengan gcc. Cuplikan kode berikut akan menampilkan cmake script untuk dikompilasi.


#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

Mengintegrasikan ke dalam struktur proyek

Struktur proyek yang disarankan:

|-- project
|----CMakeLists-txt
|----test
|------cmake
|--------Catch.cmake
|--------CatchAddTests.cmake
|--------FindCatch2.cmake
|--------ParseAndAddCatchTests.cmake
|------Main.cpp
|------ExampleTest1.cpp
|------ExampleTest2.cpp
|------CMakeLists.txt

Setelan di CMakeLists.txt proyek


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()

Setelan di CMakeLists.txt dari direktori pengujian.


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}) 

Cara menggunakan

Main.cpp


#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>

ContohTest.cpp

Contoh ini menunjukkan cara menguji dengan SCENARIOS .


#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(...);

            }
        }
    }
}

ContohTest2.cpp

Contoh ini menunjukkan cara menguji dengan 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 );

}

Catatan khusus untuk aplikasi PLCnext

Untuk menggunakan catch2 sebagai kerangka pengujian Anda harus mengecualikan konten ARP. Anda harus mengkompilasi kode Anda dengan kompiler gcc lokal. Dengan penyiapan ini, Anda dapat menguji kode non ARP Anda secara lokal.

Informasi Lebih Lanjut

Jika Anda tertarik untuk mendapatkan informasi lebih lanjut tentang catch2 Anda dapat memeriksa tautan berikut:

Lisensi

Pustaka ini diterbitkan di bawah Boost Software License 1.0


Teknologi Industri

  1. Tambahkan SaaS dan Keamanan Cloud Dengan Pengujian dan Otomatisasi
  2. Operator C++
  3. C++ do… while loop dengan Contoh
  4. C++ Switch Case Statement dengan CONTOH
  5. C++ Alokasi Dinamis Array dengan Contoh
  6. C++ Pointer dengan Contoh
  7. Tipe Data C++ Char dengan Contoh
  8. Operator C++ Overloading dengan Contoh
  9. Struktur C++ Dengan Contoh
  10. std::daftar di C++ dengan Contoh