亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

掌握 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 感兴趣,可查看以下链接:

许可证

库采用 Boost Software License 1.0 发布


工业技术

  1. 以自动化测试与性能监控强化SaaS与云安全
  2. 掌握 C++ 运算符:六大类型全解析与实战示例
  3. C++ do-while 循环详解:语法、实战示例与嵌套循环
  4. 掌握 C++ switch-case:语法、用法与实战示例
  5. C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
  6. C++ 指针精通:核心概念、代码示例与实战应用
  7. C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
  8. C++ 运算符重载实战指南:语法、方法、限制与代码示例
  9. C++ 结构体详解:定义、初始化、指针、函数参数与局限性
  10. 掌握 C++ std::list:语法、函数与实战示例
  11. C++ 函数详解:从声明到调用的实战指南
  12. C++ Struct 与 Class 核心差异、语法及最佳实践