Closed DistinctWind closed 1 year ago
我们已经选用了vcpkg作为第三方库的包管理软件,并在CMakePresets.json
当中指定了使用这个vcpkg的包。所以我们可以直接在cmake文件当中引用Catch2的内容。
find_package(Catch2 3 REQUIRED)
include(CTest)
include(Catch)
这三行代码负责找到Catch2,并且将Catch2集成到CTest当中,方便测试的运行。
一个单元测试是一个可运行的可执行文件,通过CMake的add_executable
指令添加。
为了项目的整洁,我们的单元测试计划都放在tests
文件夹下,通过cmake的add_subdirectory
的功能,将该子文件夹包含进来。
add_subdirectory(tests)
我们提前编写一个简单的将两数相加的库。以下来自add.cpp
#include "add.h"
int add(int a, int b) {
return a + b;
}
以下来自add.h
:
#ifndef CATCH2_LEARNING_ADD_H
#define CATCH2_LEARNING_ADD_H
int add(int a, int b);
#endif //CATCH2_LEARNING_ADD_H
然后是添加这个库到cmake文件当中的代码:
add_library(add add.cpp)
target_include_directories(add INTERFACE .)
#include "add.h"
#include <catch2/catch_test_macros.hpp>
TEST_CASE("Add test", "[add]") {
REQUIRE(add(1, 2) == 3);
}
重点是包含单元测试框架catch2
的头文件catch2/catch_test_macros.hpp
,然后就能使用单元测试的功能了。
我们新建了一个测试用例TEST_CASE("Add test", "[add]")
,测试内容是要求REQUIRE
函数add(1, 2)
的调用结果为3
。
使用以下CMake指令完成:
add_executable(test_add_lib test_add_lib.cpp)
target_link_libraries(test_add_lib PRIVATE add Catch2::Catch2WithMain)
catch_discover_tests(test_add_lib)
测试文件test_add_lib.cpp
中包含了单元测试代码。为了构建单元测试(单元测试是可执行文件)将示例测试文件test_add_lib.cpp
命名为目标test_add_lib
,然后将add
库和Catch2WithMain
链接起来(Catch2WithMain
这个目标提供了main
函数,不需要我们自己写)。
使用推荐的开发环境,能直接在vscode当中运行测试及其运行结果。
以上项目代码来自我的另一个示例仓库,注意观察new分支,以及new分支即将合并到main分支的Pull Request,我们单元测试结果也会显现在你的Pull Request当中。
参考Catch2文档
看一下这个Catch2单元测试框架的文档,只需要理解TEST_CASE
、REQUIRE
和SECTION
三个宏就可以了
单元测试的学习已经完成
考虑到单元测试框架在过去的学习当中都从未使用过,需要学习单元测试框架的使用方法。