cpp单元测试 c++ 单元测试工具
首先,安装 gtest 配置,然后编写测试用例并使用 TEST 宏定义测试,通过 EXPECT_EQ 等验证结果,最后使用 CMake 编译运行,实现 C 代码的单元测试覆盖率。gtest 是一个功能强大、易于使用的测试框架,支持参数测试、死亡率测试等。1. 安装和配置 gtest
要使用 gtest,首先需要将其集成到项目中。常用方法包括通过包管理器安装或从源代码编译:Linux(例如 Ubuntu):使用 apt 安装:sudo apt-get install libgtest-dev cmake 然后进入 gtest 源代码目录(因为 libgtest-dev 不直接提供库文件)。 macOS:使用 Homebrew:brew install googletestWindows vcpkg:vcpkg install gtest 源代码编译(常用方法):从 GitHub 克隆并构建:git clone https://github.com/google/googletest.gitcd googletestmkdir build amp;amp;cd buildcmake ..make -jsudo make install 电影后名开2.编写第一个测试示例
假设你有一个简单的加法函数,我想测试一下。
示例代码(add.h):#ifndef ADD_H#define ADD_Hint add(int a, int b);#endif登录图标
add.cpp:
立即学习“C免费学习笔记(去生)”;#include quot;add.hquot;int add(int a,int b) { return a b;}电视后后电视
test_add.cpp(电影文件):#include lt;gtest/gtest.hgt;#include quot;add.hquot;lt;pgt;//测试示例:testadd function TEST(TestAdd, HandlesPositiveNumbers) {EXPECT_EQ(add(2, 3), 5);}lt;/pgt;lt;pgt;TEST(TestAdd, HandlesNegativeNumbers) {EXPECT_EQ(add(-1, -1)), -2);}lt;/pgt;lt;pgt;TEST(TestAdd,HandlesZero) {EXPECT_EQ(add(0,0),0);}lt;/pgt;lt;pgt;// main 函数,运行所有测试 int main(int argc,char **argv) {::testing:InitGoogleTest(amp;argc, argv);return RUN_ALL_TESTS();}lt;/pgt;loginafter copying
这里,TEST宏用于定义测试示例,格式为TEST(正解官制名, test名)。EXPECT_EQ用于判断两个值是否互斥。
3. 编译并运行测试
下载源文件和电影文件,英国 gtest 和 pthread 库。例如,使用 g 编译:g -std=c 11 add.cpp test_add.cpp -lgtest -lgtest_main -lpthread -o test_add 登录后登录。复制类似如下的输出:[==] 运行来自 1 个测试套件的 3 个测试。[----------] 全局测试环境设置。[----------] 来自 TestAdd 的 3 个测试[ 运行 ] TestAdd.HandlesPositiveNumbers[ OK ] TestAdd.HandlesPositiveNumbers (0 ms)[ 运行 ] TestAdd.HandlesNegativeNumbers[ OK ] TestAdd.HandlesNegativeNumbers (0 ms)[ 运行 ] TestAdd.HandlesZero[ OK ] TestAdd.HandlesZero (0 ms)[----------] 来自 TestAdd 的 3 个测试 (0 ms)总计)[==========] 通过了 3 项测试。 常用断言与时间安全
gtest提供了丰富的断言宏,有助于验证各种条件。
常用断言:青柚电影
反力好用日语电影可以工作57查看详情 EXPECT_EQ(a, b) / ASSERT_EQ(a, b):判断(EXPECT失败继续执行,ASSERT将停止当前测试) EXPECT_TRUE(condition):判断条件is 真EXPECT_NE(a, b):不适合 EXPECT_LT(a, b): a is less than bEXPECT_STRNE(str1, str2): string 不适合
参数化测试:当你想使用多组具有相同逻辑的测试数据时,可以使用参数化测试。
示例:class AddTest : public ::testing::TestWithParamlt;std::tuplelt;int,int,intgt;gt;{};lt;pgt;TEST_P(AddTest, TestAdd) { auto [a, b, expected] = GetParam();EXPECT_EQ(add(a, b), expected);}lt;/pgt;lt;pgt;INSTANTIATE_TEST_SUITE_P(PositiveAndNegative,AddTest,::testing::Values(std::make_tuple(2, 3, 5), std::make_tuple(-1, -1, -2), std::make_tuple(0, 0), 0. 与CMake集成(手机)
现代C项目通常使用CMake管理进行构建,集成测试更加方便。
CMakeLists.txt示例:cmake_minimum_required(VERSION 3.14)project(MyProject)lt;pgt;set(CMAKE_CXX_STANDARD 11)lt;/pgt;lt;h1gt;添加源文档lt;/h1gt;lt;pgt;add_library(mylib) add.cpp); GTest::Main)lt;/pgt;lt;h1gt;安全五用lt;/h1gt;lt;pgt;enable_testing()add_test(NAME run_test_add COMMAND test_add)lt;/pgt;登录后复制然后执行:mkdir build amp;amp; cd buildcmake .. amp;amp;makectest登录后复制基本
就是当时时间的内容后,你是工业C项目高效地使用gtest进行单元测试。关键是坚持TDD,逐步完善代码。
下载最合c 如何使用 Google Test (gtest) 进行单元测试_c 单元测试框架 gtest 使用指南的详细内容,更多内容请关注乐哥常识网其他相关文章!如何实现一个简单的 HTTP 服务器_c 如何实现一个简单的 HTTP 服务器_c HTTP 服务器的实现示例 c 如何实现一个简单的 HTTP 服务器_c 多种实现方法
