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

在visual Studio中引入Google Test进行单元测试

因为工作,需要对函数进行单元测试。

根据需求选定了Google Test框架进行,单元测试。

开始时根据网上的教程 需要git Google Test的库。

后面发现visual Studio本身就有Google Test。

创建过程如下

首先点击工具,获取工具和功能

跳出的界面里点击使用C++的桌面开发,选择Google Test测试适配器

确定visual Studio安装了Google Test测试适配器,如果没有,安装。

点击新建,项目

搜索框里键入GOO第一个就是Google Test

点击下一步跳出

名为“Test Project Configuration”,用于配置Google Test和C++运行时库的使用方式。具体选项包括:

  • 使用Google Test的方式

    • 静态库 (.lib)

    • 动态库 (.dll)

  • C++运行时库

    • 动态链接(推荐)

    • 静态链接

    • 静态库 (.lib):如果希望简化部署并且减少运行时的依赖,可以选择静态库。这样所有的代码会被编译进最终的可执行文件。
      • 动态库 (.dll):如果希望节省内存使用,并且允许更新单个库文件而不需要重新编译整个项目,可以选择动态库。

    • C++运行时库

      • 动态链接(推荐):通常推荐使用动态链接,这样可以共享C++运行时库,节省内存和减少可执行文件大小。静态链接:如果希望避免运行时依赖,确保所有必要的库都在一个可执行文件中,可以选择静态链接

这里我默认选择了静态库,和动态链接

系统会创建如下项目

这里点击开始调试,或者开始执行

如果弹出如下图,说明引入成功

接下来,尝试测试一下如下代码

int addint(int a, int b) {
	return a + b;
}
float addfloat(float a, float b) {
	return a + b;
}

在pch.cpp中实现函数

在pch.h中声明函数

在test.cpp中写测试的宏

#include "pch.h"

TEST(TestCaseName, TestName) {
  EXPECT_EQ(1, 1);
  EXPECT_TRUE(true);
}

// addint 测试用例
TEST(AddINT, HandlesPositiveInput) {
	EXPECT_EQ(addint(1, 1), 2);
	EXPECT_EQ(addint(2, 3), 5);
}
// addfloat 测试用例
TEST(AddFloatTest, HandlesPositiveInput) {
	EXPECT_FLOAT_EQ(addfloat(1.5, 1.5), 3.0);
	EXPECT_FLOAT_EQ(addfloat(2.0, 3.5), 5.5);
}
// 主函数运行所有的测试
int main(int argc, char** argv) {
	::testing::InitGoogleTest(&argc, argv); // 初始化Google Test框架
	int result =  RUN_ALL_TESTS();
}

TEST(TestCaseName, TestName):

  • 作用:定义一个测试用例。

  • 参数TestCaseName是测试套件的名称,TestName是具体测试的名称。

EXPECT_EQ(val1, val2):

  • 作用:断言val1val2相等。如果不相等,测试将失败。

EXPECT_FLOAT_EQ(val1, val2):

  • 作用:断言两个浮点数val1val2相等,允许小范围误差。如果不相等,测试将失败。

EXPECT_TRUE(condition):

  • 作用:断言condition为真。如果condition为假,测试将失败。

::testing::InitGoogleTest(&argc, argv):

  • 作用:初始化Google Test框架,解析命令行参数,配置Google Test。

RUN_ALL_TESTS():

  • 作用:运行所有定义的测试用例,返回测试结果。

运行后结果如下

基本上就是这些,Google Test还有别的内置的宏和函数。

不过到时候用的时候,再查询使用。


http://www.kler.cn/a/369956.html

相关文章:

  • python 找出合并并排序两个有序列表后的第n个最小元素
  • 差分进化算法 (Differential Evolution) 算法详解及案例分析
  • IPhone16 Pro 设备详情
  • SQL注入漏洞之基础数据类型注入 字符 数字 搜索 XX 以及靶场实例哟
  • Geek Uninstaller,绿色免安装轻量的应用卸载工具!
  • deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_12
  • 2024年09月CCF-GESP编程能力等级认证C++编程五级真题解析
  • 鸿蒙应用开发实战-常用组件-图片组件
  • HTTP与HTTPS协议
  • C#:错误提示总结(一)
  • 2024-10月的“冷饭热炒“--解读GUI Agent 之computer use?phone use?——多模态大语言模型的进阶之路
  • 复习day
  • 通俗直观介绍ChatGPT背后的大语言模型理论知识
  • 苍穹外卖 将菜品缓存到Redis
  • CI/CD 的原理
  • 共享IPAM地址池实现多账号下地址统一规划管理
  • 2024年10月28日Github流行趋势
  • ssm005基于SSM框架的购物商城系统的开发与实现(论文+源码)_kaic
  • MLP预售开启,革新去中心化通信生态:智能手机与AI Agent齐上阵
  • 让Chrome⽀持⼩于12px 的⽂字⽅式有哪些?区别?
  • 低空经济产业链、政策、延伸品调研笔记
  • 14天速成前端 ------学习日志(已完结)------ 后端程序员学习了解前端
  • RabbitMQ 安装(Windows版本)和使用
  • Multimodal Embed 3:为人工智能搜索提供动力
  • 排查PHP服务器CPU占用率高的问题
  • Elasticsearch如何搜索日志并存储