恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

如何用 SetUpTestSuite 和 TearDownTestSuite 在 GoogleTest 测试套件中共享一次性资源

  • 首页
  • 资讯中心
  • /
  • 如何用 SetUpTestSuite 和 TearDownTestSuite 在 GoogleTest 测试套件中共享一次性资源

相关资讯

STM32驱动LKT4200安全芯片:I2C通信与Keil工程移植实战 2026/9/12 9:14:37
使用 cilium-dbg bpf srv6 sid 排查 Cilium SRv6 SID 映射表 2026/9/12 9:14:37
在 LlamaIndex 中使用 LlamaCloud MCP Servers Tools:将 LlamaCloud Indexes 与 LlamaExtract 接入任意 MCP 宿主 2026/9/12 9:14:37

最新资讯

Redis Lua脚本:原子操作与性能优化实战
Python自动化脚本开发实战:提升效率的10个技巧
Python高效交换变量值的3种方法及原理
贪心题目:三角形的最大周长
洁净环境实时监测系统设计与实践
电商大数据分析全流程实战指南

今日推荐

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现
【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)
【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

如何用 SetUpTestSuite 和 TearDownTestSuite 在 GoogleTest 测试套件中共享一次性资源

发布时间:2026/9/12 9:14:37
如何用 SetUpTestSuite 和 TearDownTestSuite 在 GoogleTest 测试套件中共享一次性资源 如何用 SetUpTestSuite 和 TearDownTestSuite 在 GoogleTest 测试套件中共享一次性资源【免费下载链接】googletestGoogleTest - Google Testing and Mocking Framework项目地址: https://gitcode.com/GitHub_Trending/go/googletestGoogleTest 会为测试套件中的每个测试单独创建一个 fixture 对象目的是让测试相互独立、便于调试。但当测试依赖的资源建立成本很高例如重量级连接、大型数据集时每个测试一份副本的开销就不值得了。advanced.md 的 Sharing Resources Between Tests in the Same Test Suite 一节给出的做法是在同一个测试套件test suite内只建立一份共享资源用SetUpTestSuite()在第一个测试前建立、TearDownTestSuite()在最后一个测试后拆除。前提是测试不修改该资源的状态只要满足这一点多个测试共享同一份资源副本是安全的。三步把一次性资源挂到测试套件上按 advanced.md 的说明操作分三步在测试 fixture 类假设叫FooTest中把用来持有共享资源的成员变量声明为static。在 fixture 类外部通常紧跟在类定义下方定义这些静态成员变量可以顺便给初始值。在同一个 fixture 类中定义static void SetUpTestSuite()来建立共享资源定义static void TearDownTestSuite()来释放它。文档特别提醒函数名的大小写是SetUpTestSuite不要拼成小写u的SetupTestSuite——faq.md 指出拼错之后这个函数会永远不会被调用而表面上看不出任何报错原因。完成这三步后GoogleTest 会自动处理调用时机SetUpTestSuite()在运行该套件第一个测试之前即创建第一个 fixture 对象之前被调用TearDownTestSuite()在运行最后一个测试之后即销毁最后一个 fixture 对象之后被调用。两个函数都可以省略按需定义。这一点与 reference/testing.md 中Test类的接口文档一致两者都是static方法分别执行该套件所有测试的共享 setup / teardown。完整示例代码以下是 advanced.md 给出的按套件共享资源的示例。其中T、new ...;以及...省略号是需要替换的部分把T换成你的资源类型new ...;换成实际的资源建立代码测试体中的省略号换成使用shared_resource_的实际断言。class FooTest : public testing::Test { protected: // Per-test-suite set-up. // Called before the first test in this test suite. // Can be omitted if not needed. static void SetUpTestSuite() { shared_resource_ new ...; // If shared_resource_ is **not deleted** in TearDownTestSuite(), // reallocation should be prevented because SetUpTestSuite() may be called // in subclasses of FooTest and lead to memory leak. // // if (shared_resource_ nullptr) { // shared_resource_ new ...; // } } // Per-test-suite tear-down. // Called after the last test in this test suite. // Can be omitted if not needed. static void TearDownTestSuite() { delete shared_resource_; shared_resource_ nullptr; } // You can define per-test set-up logic as usual. void SetUp() override { ... } // You can define per-test tear-down logic as usual. void TearDown() override { ... } // Some expensive resource shared by all tests. static T* shared_resource_; }; T* FooTest::shared_resource_ nullptr; TEST_F(FooTest, Test1) { ... you can refer to shared_resource_ here ... } TEST_F(FooTest, Test2) { ... you can refer to shared_resource_ here ... }注意示例中SetUpTestSuite()声明在protected区域但文档明确说明与TEST_P值参数化测试配合使用时SetUpTestSuite()和TearDownTestSuite()必须声明为public而不是protected见 advanced.md How to Write Value-Parameterized Tests 一节。如果你的 fixture 要用于参数化测试直接按public声明即可。必须遵守的约束与边界文档对共享资源模型给出了几条硬性限制写测试时要逐条对照测试顺序未定义。代码不能依赖某个测试先于或后于另一个测试运行共享资源的使用方式必须与执行顺序无关。不得污染共享状态。测试要么不修改任何共享资源的状态要么如果确实修改了必须在把控制权交回下一个测试之前把状态恢复到原值。SetUpTestSuite()可能不止被调用一次。当 fixture 类存在派生类时SetUpTestSuite()可能被多次调用因此不能假设函数体只执行一次。文档给出的对应处理是如果资源没有在TearDownTestSuite()中删除就应防止重复分配示例中注释掉的if (shared_resource_ nullptr)检查就是为此准备的。派生类仍能访问基类的静态共享资源。因此在管理共享资源时要小心确保资源在TearDownTestSuite()中被正确清理避免内存泄漏。在SetUpTestSuite()/TearDownTestSuite()中拿不到当前测试信息。advanced.md 说明current_test_info()在未运行测试时返回空指针而这两个函数执行的恰好不在某个测试的生命周期内。如果你需要按测试名做事这条路不可用套件名在这两个函数中是隐式已知的。如何验证套件级 setup 与 teardown 是否生效仓库自带的测试 googletest-setuptestsuite-test_.cc 演示了验证手段在SetUpTestSuite()或TearDownTestSuite()内放一条必然失败的断言例如class SetupFailTest : public ::testing::Test { protected: static void SetUpTestSuite() { ASSERT_STREQ(, SET_UP_FAIL); } }; TEST_F(SetupFailTest, NoopPassingTest) {} class TearDownFailTest : public ::testing::Test { protected: static void TearDownTestSuite() { ASSERT_STREQ(, TEAR_DOWN_FAIL); } }; TEST_F(TearDownFailTest, NoopPassingTest) {}配套脚本 googletest-setuptestsuite-test.py 对该可执行文件的判定方式是进程退出码非 0且输出中包含文档示例结果[ FAILED ] SetupFailTest: SetUpTestSuite or TearDownTestSuite [ FAILED ] TearDownFailTest: SetUpTestSuite or TearDownTestSuite 2 FAILED TEST SUITES这说明套件级函数中的断言失败会被整体归到测试套件上报告而不是某个具体测试googletest-output-test-golden-lin.txt 的 golden 输出里也有同样形态的示例行[ FAILED ] TestSuiteThatFailsToSetUp: SetUpTestSuite or TearDownTestSuite。反过来如果你想在资源不可用时直接跳过整个套件googletest-output-test_.cc 中有一个现成的用法在SetUpTestSuite()里调用GTEST_SKIP() Skip entire test suite;即可跳过整个测试套件。下一步资源已经在套件层面共享之后如果还需要跨多个测试套件乃至整个测试程序共享资源advanced.md 的 Global Set-Up and Tear-Down 一节提供了::testing::Environment与AddGlobalTestEnvironment()的更大粒度方案本文的套件级共享只覆盖单个测试套件内的场景。【免费下载链接】googletestGoogleTest - Google Testing and Mocking Framework项目地址: https://gitcode.com/GitHub_Trending/go/googletest创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号