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

c++ 使用 catch2 进行测试

摘要

在本文中,我将解释如何使用 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 中的设置 测试目录。


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++ 动态分配数组的例子
  6. 带有示例的 C++ 指针
  7. C++ Char 数据类型及示例
  8. 带有示例的 C++ 运算符重载
  9. C++ 结构与示例
  10. C++ 中的 std::list 示例
  11. 带有程序示例的 C++ 函数
  12. 结构和类的区别:用 C++ 示例解释