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

googletest简介gtest, ut, 加过滤条件EXPECT_CALL

googletest简介_google test_唏噗的博客-CSDN博客

gtest Test_F 和Test 区别_惹不起的程咬金的博客-CSDN博客

GTest 总结_gtest getparam_HUSTER593的博客-CSDN博客

https://www.cnblogs.com/jycboy/p/gtest_catalog.html

https://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

https://www.cnblogs.com/coderzh/archive/2010/01/09/beautiful-testcase.html

gtest 三种事件机制_gtest teardown-CSDN博客

gtest中如何跳出当前测试案例-CSDN博客

括:‌行覆盖率、函数覆盖率、分支覆盖率‌

如果目标是“确认我们新增函数都跑到”,日志比 coverage 更可靠;好的,那现在是不是所有需要覆盖的地方,都加了日志了?行覆盖率/函数覆盖率/分支覆盖率。麻烦如果没有加的,帮我加上。同时再完善一下testcase,保证所有地方都测到.

TearDown

一、全局的事件机制(针对整个测试程序)

实现全局的事件机制,需要创建一个自己的类,然后继承testing::Environment类,然后分别实现成员函数SetUp()和TearDown(),同时在main函数内进行调用,即"testing::AddGlobalTestEnvironment(new MyEnvironment);",通过调用函数我们可以添加多个全局的事件机制。

SetUp()函数是在所有测试开始前执行。

TearDown()函数是在所有测试结束后执行。

示例:

可以通过命令行参数--gtest_filter来添加过滤条件,支持通配符和正则表达式。

过滤条件的语法和用法

  1. 通配符‌:

    • *:表示任意数量的字符。
    • ?:表示任意单个字符。
    • -:表示排除特定测试。
    • ::表示或(取或)。
  2. 示例‌:

    • ./foo_test:运行所有测试案例。
    • ./foo_test --gtest_filter=*:运行所有测试案例。
    • ./foo_test --gtest_filter=FooTest.*:运行所有测试案例名称以FooTest开头的案例。
    • ./foo_test --gtest_filter=*Null*:*Constructor*:运行所有测试案例名称或测试名称包含NullConstructor的案例。
    • ./foo_test --gtest_filter=-*DeathTest.*:运行所有非死亡测试案例。
    • ./foo_test --gtest_filter=FooTest.*-FooTest.Bar:运行所有以FooTest开头的案例,但排除FooTest.Bar案例‌12。

过滤多个测试用例的语法

  • 使用冒号:分隔多个测试用例名称或模式,例如:--gtest_filter="FooTest.*:BarTest.case1:OtherTest.case2"‌2。

排除特定测试用例的语法

  • 使用符号-排除特定测试用例,例如:--gtest_filter="FooTest.*:-FooTest.case1"运行所有以FooTest开头的案例,但排除FooTest.case1‌2。

通过这些过滤条件,可以高效地指定需要运行的测试案例,或者排除不需要的测试案例,从而优化调试和测试过程。

玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数 - CoderZh - 博客园

--gtest_break_on_failure 重复执行1000次,并且在第一个错误发生时立即停止。这个功能对调试非常有用。

单元测试框架gtest学习(四)—— 参数化_gtest 参数化-CSDN博客

GoogleTest单元测试 - 随笔分类 - 超超boy - 博客园

Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础语法 - 超超boy - 博客园

#include "stdafx.h" //定义需要模拟的接口类 class FooInterface { public: virtual ~FooInterface() {} virtual std::string getArbitraryString() = 0; virtual int getPosition() = 0; }; //模拟类 class MockFoo : public FooInterface { public: MOCK_METHOD0(getArbitraryString, std::string()); MOCK_METHOD0(getPosition, int()); }; using namespace seamless; using namespace std; using ::testing::Return; int main(int argc, char** argv) { //Since Google Mock depends on Google Test, InitGoogleMock() is also responsible for initializing Google Test. //Therefore there's no need for calling testing::InitGoogleTest() separately. ::testing::InitGoogleMock(&argc, argv); int n = 100; string value = "Hello World!"; MockFoo mockFoo; EXPECT_CALL(mockFoo, getArbitraryString()) .Times(1) .WillOnce(Return(value)); string returnValue = mockFoo.getArbitraryString(); cout << "Returned Value: " << returnValue << endl; //在这里Times(2)意思是调用两次,但是下边只调用了一次,所以会报出异常 EXPECT_CALL(mockFoo, getPosition()) .Times(2) .WillRepeatedly(Return(n++)); int val = mockFoo.getPosition(); //100 cout << "Returned Value: " << val << endl; //getPosition指定了调用两次,这里只调用了一次,所以运行结果显示出错 return EXIT_SUCCESS; }

可以看到上边都输出了,最后有个错误,这个错误是因为:getPosition指定了调用两次,这里只调用了一次,所以运行结果显示出错

主要是下面这3步.

MOCK_METHOD(getArbitraryString, std::string()) EXPECT_CALL(mockFoo, getArbitraryString()) .Times(1) .WillRepeatedly(Return(value)); string returnValue = mockFoo.getArbitraryString();
http://www.jsqmd.com/news/1201680/

相关文章:

  • rabbitmq之工作队列(一)
  • 湖北现代科技学校咨询热线是多少 - 湖北找学校
  • 公考机构课程有效期陷阱:那些你没注意到的“隐形条款“
  • Crypto+AI为什么叫好不叫座?供需错配背后的基础设施困局
  • FanControl风扇控制软件:3步解决华硕主板传感器识别限制的高效方案
  • 【第九天】C++函数对象/仿函数、谓词、适配器及常见algorithm算法
  • DAC单端转差分电路设计与应用指南
  • MiniCPM5-1B-Agentic-Tooluse-GGUF与vLLM集成指南:实验性GGUF支持配置教程
  • 技术架构文档的写作规范:ADRs(Architecture Decision Records)从原理到实践
  • Redis 3.x——哨兵基本概念
  • 如何在Apple Silicon上部署Qwopus3.6-35B-A3B-Coder-6bit:从安装到运行的完整教程
  • Rainbow-delimiters性能测试报告:与其他彩虹括号插件的对比
  • AI产品用户旅程的转化漏斗模型:从首次激活到深度留存的工程化分析
  • 小程序计算机毕设之文旅展馆线上预约服务系统的设计与实现 基于 Django + 微信小程序的咖啡博物馆票务管理小程序(完整前后端代码+说明文档+LW,调试定制等)
  • Ornith-1.0-9B-OptiQ-4bit部署实战:从安装到运行的完整流程
  • uos-mgmt-exporter与Prometheus+Grafana集成:打造可视化监控平台
  • 怎么批量下载图片
  • 如何通过FanControl实现华硕主板风扇的精准控制与静音优化
  • mysql日志刷盘
  • Redis 3.x——哨兵安装和部署
  • 网闸工作原理
  • AnimeGen-I2V-A14B-Lightning-int4部署指南:从本地到云端的最佳实践
  • 2026龙虾AI智能体平台哪家好:七款本地云端隐私自动化工具横向测评
  • 未来已来:Dolphin3-Cyber-8B-GGUF如何重塑网络安全培训与攻防演练
  • 3步搞定音频转换:fre:ac开源音频转换器的完整指南
  • 小程序计算机毕设之基于 Django 与协同过滤算法的校园音乐推荐小程序的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Copilot键盘操作全图解:从新手到专家必须掌握的15个隐藏快捷键
  • DAVIS346动态视觉传感器
  • React Komposer 数据容器设计原理深度解析:构建高效React应用的核心秘诀
  • 如何快速上手MiniCPM5-1B-Agentic-Tooluse-GGUF:从下载到运行的完整指南