掌握 Catch2 进行 C++ 单元测试:实用指南
摘要
本文解释如何使用 catch2 进行单元测试。
如何构建
构建源码需从 https://github.com/catchorg/Catch2/tags 下载发布版。现可用 gcc 编译源码。以下代码片段展示编译的 cmake script:
#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
集成到项目结构
推荐项目结构:
|-- project |----CMakeLists-txt |----test |------cmake |--------Catch.cmake |--------CatchAddTests.cmake |--------FindCatch2.cmake |--------ParseAndAddCatchTests.cmake |------Main.cpp |------ExampleTest1.cpp |------ExampleTest2.cpp |------CMakeLists.txt
CMakeLists.txt 项目设置:
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()
CMakeLists.txt test 目录设置:
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})
如何使用
Main.cpp
#define CATCH_CONFIG_MAIN #include <catch2/catch.hpp>
ExampleTest.cpp
此例展示如何用 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(...); } } } }
ExampleTest2.cpp
此例展示如何用 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 ); }
PLCnext 应用特别说明
要将 catch2 用作测试框架,必须排除 ARP 内容。需用本地 gcc 编译器编译代码。此设置下可在本地测试非 ARP 代码。
更多信息
若对 catch2 感兴趣,可查看以下链接:
- GitHub: https://github.com/catchorg/Catch2
许可证
库采用 Boost Software License 1.0 发布
工业技术
- 以自动化测试与性能监控强化SaaS与云安全
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ do-while 循环详解:语法、实战示例与嵌套循环
- 掌握 C++ switch-case:语法、用法与实战示例
- C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
- C++ 指针精通:核心概念、代码示例与实战应用
- C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
- C++ 运算符重载实战指南:语法、方法、限制与代码示例
- C++ 结构体详解:定义、初始化、指针、函数参数与局限性
- 掌握 C++ std::list:语法、函数与实战示例
- C++ 函数详解:从声明到调用的实战指南
- C++ Struct 与 Class 核心差异、语法及最佳实践