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:
- GitHub :https://github.com/catchorg/Catch2
Lisensi
Pustaka ini diterbitkan di bawah Boost Software License 1.0