当前位置: 首页 > wzjs >正文

厦门 经营性网站备案今日头条极速版最新

厦门 经营性网站备案,今日头条极速版最新,网站如何做链接,企业为什么要建立自己的网站文章目录Google Test 介绍和使用指南主要特性安装 Google Test使用包管理器安装(Linux)使用 CMake 集成基本使用简单测试示例常用断言宏测试夹具(Test Fixtures)参数化测试死亡测试高级特性类型化测试值参数化测试运行测试与 CMak…

文章目录

  • Google Test 介绍和使用指南
    • 主要特性
    • 安装 Google Test
      • 使用包管理器安装(Linux)
      • 使用 CMake 集成
    • 基本使用
      • 简单测试示例
      • 常用断言宏
      • 测试夹具(Test Fixtures)
      • 参数化测试
      • 死亡测试
    • 高级特性
      • 类型化测试
      • 值参数化测试
    • 运行测试
    • 与 CMake 集成示例
    • 最佳实践

Google Test 介绍和使用指南

Google Test(通常缩写为 gtest)是 Google 开发的一个 C++ 测试框架,用于编写和运行单元测试。它是目前最流行的 C++ 测试框架之一,具有丰富的功能和良好的跨平台支持。

主要特性

  1. 丰富的断言:提供多种断言宏用于验证测试结果
  2. 测试夹具:支持测试夹具(Test Fixtures)来共享测试设置和清理代码
  3. 参数化测试:支持参数化测试,可以用不同的参数运行相同的测试逻辑
  4. 死亡测试:可以测试程序是否按预期方式终止
  5. 跨平台:支持 Linux、Windows、Mac 等多种平台
  6. 与构建系统集成:易于与 CMake、Bazel 等构建系统集成

安装 Google Test

使用包管理器安装(Linux)

# Ubuntu/Debian
sudo apt-get install libgtest-dev# 编译并安装
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
sudo cp *.a /usr/lib

使用 CMake 集成

现代 CMake 项目可以通过 FetchContent 直接引入 Google Test:

include(FetchContent)
FetchContent_Declare(googletestURL https://github.com/google/googletest/archive/refs/heads/main.zip
)
FetchContent_MakeAvailable(googletest)

基本使用

简单测试示例

#include <gtest/gtest.h>// 测试函数
int Add(int a, int b) {return a + b;
}// 定义一个测试用例
TEST(TestAdd, PositiveNumbers) {EXPECT_EQ(Add(2, 3), 5);
}TEST(TestAdd, NegativeNumbers) {EXPECT_EQ(Add(-2, -3), -5);
}int main(int argc, char **argv) {testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}

常用断言宏

Google Test 提供两类主要断言:

  1. ASSERT_ 系列:失败时立即终止当前测试
  2. EXPECT_ 系列:失败时继续执行当前测试

常用断言:

  • EXPECT_EQ(val1, val2):验证相等
  • EXPECT_NE(val1, val2):验证不等
  • EXPECT_TRUE(condition):验证条件为真
  • EXPECT_FALSE(condition):验证条件为假
  • EXPECT_LT(val1, val2):验证 val1 < val2
  • EXPECT_LE(val1, val2):验证 val1 <= val2
  • EXPECT_GT(val1, val2):验证 val1 > val2
  • EXPECT_GE(val1, val2):验证 val1 >= val2
  • EXPECT_STREQ(str1, str2):验证字符串相等
  • EXPECT_THROW(statement, exception_type):验证抛出特定异常

测试夹具(Test Fixtures)

测试夹具允许你在多个测试间共享设置和清理代码:

class VectorTest : public testing::Test {
protected:void SetUp() override {v1.push_back(1);v2.push_back(2);v2.push_back(3);}void TearDown() override {// 清理代码}std::vector<int> v1;std::vector<int> v2;
};TEST_F(VectorTest, SizeTest) {EXPECT_EQ(v1.size(), 1);EXPECT_EQ(v2.size(), 2);
}TEST_F(VectorTest, ContentTest) {EXPECT_EQ(v1[0], 1);EXPECT_EQ(v2[0], 2);EXPECT_EQ(v2[1], 3);
}

参数化测试

class IsPrimeTest : public testing::TestWithParam<int> {// 可以在这里定义夹具
};TEST_P(IsPrimeTest, TestsIsPrime) {int n = GetParam();EXPECT_TRUE(IsPrime(n));
}INSTANTIATE_TEST_SUITE_P(PrimeValues, IsPrimeTest,testing::Values(2, 3, 5, 7, 11, 13, 17, 19));

死亡测试

验证代码是否按预期终止:

TEST(ExitTest, DiesCorrectly) {EXPECT_DEATH({fprintf(stderr, "Fatal error detected!\n");exit(1);}, "Fatal error detected!");
}

高级特性

类型化测试

template <typename T>
class TypedTest : public testing::Test {};typedef testing::Types<int, float, double> MyTypes;
TYPED_TEST_SUITE(TypedTest, MyTypes);TYPED_TEST(TypedTest, SizeTest) {EXPECT_EQ(sizeof(TypeParam), 4);  // 对int和float成立,double不成立
}

值参数化测试

class MyTest : public testing::TestWithParam<std::tuple<int, int>> {};TEST_P(MyTest, SumTest) {auto params = GetParam();int a = std::get<0>(params);int b = std::get<1>(params);EXPECT_EQ(a + b, Add(a, b));
}INSTANTIATE_TEST_SUITE_P(Default, MyTest,testing::Combine(testing::Range(1, 5),testing::Range(5, 10)));

运行测试

编译后运行测试程序,Google Test 会输出详细的测试结果:

[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from TestAdd
[ RUN      ] TestAdd.PositiveNumbers
[       OK ] TestAdd.PositiveNumbers (0 ms)
[ RUN      ] TestAdd.NegativeNumbers
[       OK ] TestAdd.NegativeNumbers (0 ms)
[----------] 2 tests from TestAdd (0 ms total)[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (0 ms total)
[  PASSED  ] 2 tests.

与 CMake 集成示例

完整 CMake 项目示例:

cmake_minimum_required(VERSION 3.14)
project(MyProject)# 引入Google Test
include(FetchContent)
FetchContent_Declare(googletestURL https://github.com/google/googletest/archive/refs/heads/main.zip
)
FetchContent_MakeAvailable(googletest)# 添加可执行文件
add_executable(my_teststest/test_main.cpptest/test_example.cppsrc/my_code.cpp
)# 链接Google Test
target_link_libraries(my_testsGTest::GTestGTest::Main
)# 添加测试
enable_testing()
add_test(NAME my_tests COMMAND my_tests)

最佳实践

  1. 测试命名应清晰表达其目的
  2. 每个测试应只验证一件事
  3. 使用夹具避免重复代码
  4. 优先使用 EXPECT_ 而非 ASSERT_,除非失败后继续测试无意义
  5. 为测试添加必要的注释
  6. 保持测试独立,不依赖执行顺序
  7. 定期运行测试,最好集成到CI/CD流程中

Google Test 提供了丰富的文档和示例,可以通过其 GitHub 仓库 获取更多信息。

http://www.dtcms.com/wzjs/380790.html

相关文章:

  • ecshop网站制作网络推广怎么做
  • 网站建设中怎样进入后台网络服务包括
  • 湖州做网站建设的公司国家反诈中心app下载
  • 湖北省住房和城乡建设网站百度推广开户费用标准
  • 沈阳网站建设建设公司哪家好搜索引擎关键词怎么选
  • 汉阴网站建设教育培训平台
  • 动态网站建设从入门到精通百度网站联系方式
  • 计算机网络技术就业方向专科镇江百度关键词优化
  • 奉贤网站建设上海站霸百度移动端模拟点击排名
  • 企业自助建站系统 嘉兴锦绣大地seo官网
  • 网站建设与制作培训通知营销推广网站推广方案
  • 做学校法人年度报告的网站网络推广营销技巧
  • 生鲜配送网站建设手机百度登录入口
  • 深圳装修公司哪家比较好seo公司费用
  • 小说网站制作开源中国去中心化搜索引擎
  • 8月4日建设部网站通报企业培训师
  • 网站移动端做pc端的301跳转外贸怎么建立自己的网站
  • 上海网站建设sheji021考证培训机构
  • 相亲网站怎么做怎么营销推广
  • 外贸网站 php怎么快速优化网站排名
  • 新建网站推广设计网站排行
  • 网站系统开发怎么做今天《新闻联播》回放
  • 湖北商城网站建设多少钱深圳百度关键
  • 潮阳网站开发友情链接是什么
  • 基于web电子购物网站的建设外贸网络推广营销
  • 成都网站建设行业分析丽水网站seo
  • 益阳网站建设百度产品优化排名软件
  • c 网站开发网址大全百度
  • 马鞍山网站制作公司关键词查找的方法有以下几种
  • 不通过第三方平台做微网站营销自动化工具