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

gtest中TEST和TEST_F和TEST_P的区别是什么

gtest(Google Test)是Google开发的一个开源的C++测试框架,它提供了多种宏来支持不同类型的测试。其中,TEST、TEST_F和TEST_P是三个常用的宏,它们各自有不同的用途和特性。以下是它们之间的主要区别:

TEST
用途:用于创建简单的测试用例。它定义了一个测试函数,在这个函数里可以使用任何C++代码并使用gtest提供的断言来进行检查。
特点:
不需要继承任何类。
直接定义测试函数,不涉及复杂的测试环境设置和清理。
适用于对静态或全局函数、简单类的单元测试。
语法:TEST(test_case_name, test_name)
test_case_name:测试用例名,通常是取测试函数名或者测试类名。
test_name:测试名,可以自定义,但最好取有意义的名称。
TEST_F
用途:用于创建需要共享测试数据的测试用例。它通过一个测试夹具(Test Fixture)类来管理测试前的准备和测试后的清理工作。
特点:
需要继承::testing::Test类。
提供了SetUp()和TearDown()两个虚函数,分别用于在每个测试用例执行 前后的准备和清理工作。
适用于需要多个测试用例共享相同测试数据的场景。
语法:TEST_F(test_fixture_class_name, test_name)
test_fixture_class_name:测试夹具类名,必须是一个继承自::testing::Test的类名。
test_name:测试名,可以自定义,但最好取有意义的名称。
TEST_P
用途:用于参数化测试。它允许开发者为同一个测试函数提供多个参数,并自动为每个参数生成一个单独的测试用例。
特点:
需要继承::testing::TestWithParam<T>类,其中T是参数的类型。
提供了GetParam()方法来获取当前测试用例的参数。
适用于需要测试函数在不同参数下的行为的场景。
需要使用INSTANTIATE_TEST_CASE_P宏来实例化测试,指定参数生成器。
语法:TEST_P(test_fixture_class_name, test_name)
test_fixture_class_name:测试夹具类名,必须是一个继承自::testing::TestWithParam<T>的类名。
test_name:测试名,可以自定义,但最好取有意义的名称。
总结
宏    用途    特点    语法
TEST    创建简单测试用例    不需要继承类,直接定义测试函数    TEST(test_case_name, test_name)
TEST_F    创建需要共享测试数据的测试用例    继承::testing::Test类,提供SetUp()和TearDown()函数    TEST_F(test_fixture_class_name, test_name)
TEST_P    创建参数化测试用例    继承::testing::TestWithParam<T>类,提供GetParam()方法,需要INSTANTIATE_TEST_CASE_P宏实例化    TEST_P(test_fixture_class_name, test_name)


gtest通过这些宏提供了灵活多样的测试方式,以满足不同场景下的测试需求。

http://www.lryc.cn/news/423022.html

相关文章:

  • VS2022如何调出输出窗口,并在输出窗口打印日志
  • 【全国大学生电子设计竞赛】2021年I题
  • 【项目】基于Vue2+Router+Vant 前端面经项目
  • 【论文阅读】YOLOv10: Real-Time End-to-End Object Detection
  • 计算资源消耗
  • 企业微信推送消息的Java实现教程
  • 强化学习之Actor-Critic算法(基于值函数和策略的结合)——以CartPole环境为例
  • Linux学习记录(五)-------三类读写函数
  • 2024年8月13日(lvs NAT脚本 RS脚本 ds脚本)
  • css实现水滴效果图
  • 接口测试面试题目,你都会了吗?
  • jmeter-beanshell学习16-自定义函数
  • LogicFlow工作流在React和Vue3中的使用
  • Python循环语句:不到长城心不死
  • Unity教程(九)角色攻击的改进
  • 宠物空气净化器真的能除毛吗?有哪些选购技巧和品牌推荐修改版
  • Qt自定义注释
  • 【模电笔记】——信号的运算和处理电路(含电压比较器)
  • Java之 equals()与==
  • Ubuntu20.04 运行深蓝路径规划hw1
  • 企业如何组建安全稳定的跨国通信网络
  • WordPress原创插件:Download-block-plugin下载按钮图标美化
  • 前端【详解】缓存
  • P5821 【LK R-03】密码串匹配
  • httpx,一个网络请求的 Python 新宠儿
  • 计算机网络408考研 2014
  • JavaScript 资源大全中文版
  • 如何获取能直接在浏览器打开的播放地址?
  • 如何用 LangChain 实现一个Zero Shot智能决策器(附源码)
  • 读完这本书,我终于搞懂了Transformer、BERT和GPT!【附PDF】