VSCode 中使用 Google Test(GTest)框架测试

VSCode 中使用 Google Test(GTest)框架在 VSCode 中对 C++ 代码进行测试的示例:

一、Unbutu x86使用gtest

环境配置

  • 安装 GTest :在 Ubuntu 系统中,可以通过命令sudo apt-get install libgtest-dev安装 GTest 库。对于其他系统,可前往GTest 官方网站查看安装教程。

  • 配置 VSCode :确保 VSCode 已正确配置 C++ 编译环境,如安装 C/C++ 扩展等。

示例代码

  • 被测试代码Calculator.hCalculator.cpp):

// Calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_Hclass Calculator {
public:int add(int a, int b);int subtract(int a, int b);int multiply(int a, int b);double divide(int a, int b);
};#endif // CALCULATOR_H
// Calculator.cpp
#include "Calculator.h"int Calculator::add(int a, int b) {return a + b;
}int Calculator::subtract(int a, int b) {return a - b;
}int Calculator::multiply(int a, int b) {return a * b;
}double Calculator::divide(int a, int b) {if (b == 0) {return 0.0; // 简单处理除以零的情况}return static_cast<double>(a) / b;
}
  • 测试代码CalculatorTest.cpp):

// CalculatorTest.cpp
#include <gtest/gtest.h>
#include "../Calculator.h"// 测试 add 方法
TEST(CalculatorTest, AddTest) {Calculator calculator;EXPECT_EQ(calculator.add(1, 2), 3);EXPECT_EQ(calculator.add(-1, 1), 0);EXPECT_EQ(calculator.add(-5, -3), -8);
}// 测试 subtract 方法
TEST(CalculatorTest, SubtractTest) {Calculator calculator;EXPECT_EQ(calculator.subtract(5, 3), 2);EXPECT_EQ(calculator.subtract(-1, 2), -3);EXPECT_EQ(calculator.subtract(-5, -3), -2);
}// 测试 multiply 方法
TEST(CalculatorTest, MultiplyTest) {Calculator calculator;EXPECT_EQ(calculator.multiply(3, 4), 12);EXPECT_EQ(calculator.multiply(-2, 5), -10);EXPECT_EQ(calculator.multiply(-3, -4), 12);
}// 测试 divide 方法
TEST(CalculatorTest, DivideTest) {Calculator calculator;EXPECT_DOUBLE_EQ(calculator.divide(6, 2), 3.0);EXPECT_DOUBLE_EQ(calculator.divide(-5, 2), -2.5);EXPECT_DOUBLE_EQ(calculator.divide(5, -2), -2.5);EXPECT_DOUBLE_EQ(calculator.divide(0, 5), 0.0);EXPECT_DOUBLE_EQ(calculator.divide(5, 0), 0.0); // 测试除以零的情况
}int main(int argc, char **argv) {testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}

目录结构

.
|-- Calculator.cpp
|-- Calculator.h
|-- api.test.js
`-- build`-- CalculatorTest.cpp

编译和运行测试

  • 编译命令 :在终端中,使用如下命令编译测试代码。假设 GTest 库安装在/usr/src/gtest目录下。

g++ -std=c++11 -I/usr/src/gtest/include -I/usr/src/gtest ../Calculator.cpp CalculatorTest.cpp -o CalculatorTest /usr/src/gtest/libgtest.a /usr/src/gtest/libgtest_main.a -lpthread
  • 运行测试 :运行编译生成的可执行文件./CalculatorTest,即可看到测试结果。


编译问题记录

现象:

解决:
  • 检查 GTest 是否正确安装

    • 如果你使用的是 Ubuntu 系统,可以通过运行以下命令来安装 GTest:

sudo apt-get install libgtest-dev

* 安装完成后,系统应该会自动将 GTest 的库文件安装到正确的目录,通常是`/usr/src/gtest`。不过,可能还需要手动编译 GTest 库。进入`/usr/src/gtest`目录,然后运行以下命令来编译和安装库:

mkdir build
cd build
cmake ..
sudo make install
  • 检查编译命令中的路径是否正确

    • 确保在编译命令中指定的路径 /usr/src/gtest/libgtest.a/usr/src/gtest/libgtest_main.a 是正确的。如果安装路径不同,请相应地修改编译命令中的路径。你可以通过以下命令来查找 GTest 库文件的实际位置:

find / -name "libgtest.a"
find / -name "libgtest_main.a"

* 根据查找结果,更新编译命令中的路径。

  • 使用 CMake 构建项目

    • 创建一个 CMakeLists.txt 文件来简化项目的构建过程。以下是一个简单的示例:

cmake_minimum_required(VERSION 3.10)
project(CalculatorTest)set(CMAKE_CXX_STANDARD 11)include_directories(/usr/src/gtest/include)
link_directories(/usr/src/gtest/build)add_executable(CalculatorTest Calculator.cpp CalculatorTest.cpp)
target_link_libraries(CalculatorTest gtest gtest_main pthread)

* 然后在 build 目录中运行以下命令来构建项目:

cmake ..
make

二、交叉编译arm的gtest

环境配置

  • 下载 GTest 源码 :从GTest 官方网站下载最新版本的 GTest 源码。下载代码 :git clone https://github.com/google/googletest.git

  • 解压并进入源码目录 :解压下载的文件,并进入 GTest 源码的 googletest 目录。

  • 创建构建目录并编译 :在该目录下创建一个 build 目录,进入并使用交叉编译器编译 GTest 库:

mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-g++ -DCMAKE_C_COMPILER=/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-gcc ..
make
  • 安装交叉编译后的 GTest 库 :将编译生成的 libgtest.alibgtest_main.a 库文件复制到一个目录,如 /home/share/user/project/test:

cd /home/share/user/project/test
mkdir gtest/lib -p
cp lib*.a gtest/lib #注意:这里的lib*.a是下载源码编译后生成的arm64版本的库文件

示例代码(同“Unbutu x86使用gtest”)

目录结构

test目录下的目录结构如下:

home/share/user/project/test路径下文件如下:

  • 修改 CMakeLists.txt 文件 :指定交叉编译后的 GTest 库路径:

cmake_minimum_required(VERSION 3.10)
project(CalculatorProject)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)# 指定交叉编译工具链
set(CMAKE_C_COMPILER "/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-gcc")
set(CMAKE_CXX_COMPILER "/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-g++")# 确保 CMake 找到 Google Test 头文件
set(GTEST_INCLUDE_DIR "/home/share/user/project/test/gtest/include")
include_directories(${GTEST_INCLUDE_DIR})
message("GTest include directory: ${GTEST_INCLUDE_DIR}")#target_include_directories(CalculatorTest PRIVATE ${GTEST_INCLUDE_DIR})# 指定 Calculator 源文件
add_library(Calculator STATIC Calculator.cpp Calculator.h)# 指定测试源文件
add_executable(CalculatorTest CalculatorTest.cpp)# 指定交叉编译后的 GTest 库路径
set(GTEST_LIBRARY "home/share/user/project/test/gtest/lib/libgtest.a")
set(GTEST_MAIN_LIBRARY "home/share/user/project/test/lib/libgtest_main.a")# 链接 Calculator 库和 GTest 库到测试可执行文件
target_link_libraries(CalculatorTest Calculator ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY} pthread)

构建和运行测试

  • 创建构建目录 :在项目根目录下创建一个 build 目录(可命名为 build),用于存放构建生成的文件。

  • 运行 CMake 配置 :在 build 目录下运行 CMake 命令来配置项目:

cmake ..
  • 构建项目 :运行以下命令来构建项目:

make
  • 运行测试 :构建完成后,运行生成的测试可执行文件:

./CalculatorTest #说明:由于是交叉编译生成的,需要再对应的arm64的开发板上才能运行该程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912658.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【1.6 漫画数据库设计实战 - 从零开始设计高性能数据库】

1.6 漫画数据库设计实战 - 从零开始设计高性能数据库 &#x1f3af; 学习目标 掌握数据库表结构设计原则理解字段类型选择与优化学会雪花算法ID生成策略掌握索引设计与优化技巧了解分库分表设计方案 &#x1f4d6; 故事开始 小明: “老王&#xff0c;我总是不知道怎么设计数…

OSPF虚拟链路术语一览:快速掌握网络路由

大家好&#xff0c;这里是G-LAB IT实验室。今天带大家了解一下OSPF的相关知识&#xff01; 01 OSPF虚拟链路术语大全 网络架构中&#xff0c;OSPF&#xff08;开放式最短路径优先&#xff09;是一种重要的路由协议。通过其链路状态路由机制&#xff0c;OSPF能够有效维护和更新…

oracle常用的函数(一) 之 to_char、to_date

文章目录 前言to_char基本语法格式模型格式模型介绍无FM示例使用FM输出货币负数输出尖括号 将日期格式化将数字格式化为带有货币符号和千位分隔符的格式总结 to_date语法语法示例 戳这里&#xff0c;第二弹 → oracle常用的函数&#xff08;二&#xff09; 之 nvl、decode、l…

数据库服务器宕机的处理方法与实战策略

在当今数字化时代,数据库作为企业数据存储与管理的核心,承载着业务运行的关键信息。一旦数据库服务器宕机,将导致业务中断、数据丢失等严重后果,甚至可能给企业带来巨大的经济损失和声誉损害。因此,掌握一套系统、科学的数据库服务器宕机处理方法尤为重要。本文将从应急响…

如何hack边缘的kubelet修改Cgroup数值

之前做了一个VPA项目的需求&#xff0c;就是需要不重启的方式修改容器的Cgroup的值已达到垂直扩缩容的目的&#xff0c;项目中核心的思路如下 上游下发要VPA的结果的值写入到容器的Annotation里面Kubelet 感知到这个 annoation 的变化我们本地运行一个 Agent&#xff0c;里面运…

熟悉 PyCharm

界面 我们常用的就这个几个地方&#xff1a; 常用配置 调整字体大小 Ctrl 滚轮调整字体大小 插件推荐 Indent Rainbow 该插件的作用在于能够对于不同层级缩进的空格标注不同的颜色&#xff1a; 快捷键 快捷键的 pdf 下载链接&#xff1a; Windows 版&#xff1a;https:…

pytorch--模型训练的一般流程

文章目录 前言0、数据集准备1、数据集2、dataset3、model4、训练模型 前言 在pytorch中模型训练一般分为以下几个步骤&#xff1a; 0、数据集准备 1、数据集读取&#xff08;dataset模块&#xff09; 2、数据集转换为tensor&#xff08;dataloader模块&#xff09; 3、定义模型…

智能合同管理实战:基于区块链的电子签约技术实现

在数字经济时代,传统纸质合同签署方式已难以满足企业高效、安全、合规的业务需求。智能合同管理(Smart Contract Management)结合区块链技术,正在重塑电子签约流程,实现合同全生命周期的自动化、可追溯和防篡改。本文将深入探讨基于区块链的电子签约技术实现,涵盖核心架构…

设计模式精讲 Day 22:模板方法模式(Template Method Pattern)

【设计模式精讲 Day 22】模板方法模式&#xff08;Template Method Pattern&#xff09; 文章标签 设计模式, 模板方法模式, Java开发, 面向对象设计, 软件架构, 设计模式实战, Java应用开发 文章简述 模板方法模式是一种行为型设计模式&#xff0c;它通过定义一个算法的骨架…

如何在pytorch中使用tqdm:优雅实现训练进度监控

文章目录 为什么需要进度条&#xff1f;tqdm 简介基础用法示例深度学习中的实战应用1. 数据加载进度监控2. 训练循环增强版3. 验证阶段集成 高级技巧与最佳实践1. 自定义进度条样式2. 嵌套进度条&#xff08;多任务&#xff09;3. 分布式训练支持4. 与日志系统集成 性能优化建议…

Linux中的xxd命令详解

xxd 是一个 十六进制转储&#xff08;hex dump&#xff09;工具&#xff0c;通常用于将二进制文件转换为十六进制格式&#xff0c;或者反向转换&#xff08;十六进制→二进制&#xff09;。它是 vim 的一部分&#xff0c;但在大多数 Linux 系统&#xff08;如 Ubuntu&#xff0…

磐维数据库panweidb3.1.0单节点多实例安装

0 说明 业务科室提单需要在某台主机上部署多个单机磐维数据库&#xff0c;用于业务测试。以下内容展示如何在单节点安装多个磐维数据库实例。 1 部署环境准备 1.1 IP 地址及端口 instipport实例1192.168.131.1717700实例2192.168.131.1727700 在131.17上分别安装两个实例&…

转录组分析流程(三):功能富集分析

我们的教程主要是以一个具体的例子作为线索,通过对公共数据库数据bulk-RNA-seq的挖掘,利用生物信息学分析来探索目标基因集作为某种疾病数据预后基因的潜能及其潜在分子机制,同时在单细胞水平分析(对scRNA-seq进行挖掘)预后基因的表达,了解细胞之间的通讯网络,以期为该疾病…

全面掌握 tkinter:Python GUI 编程的入门与实战指南

在自动化、工具开发、数据可视化等领域&#xff0c;图形用户界面&#xff08;GUI&#xff09;往往是提升用户体验的重要方式。作为 Python 官方内置的 GUI 库&#xff0c;tkinter 以其轻量、跨平台、易于学习的特性成为初学者和轻量级应用开发者首选。 本文将以深入浅出的方式…

TDH社区开发版安装教程

&#xff08;注&#xff1a;本文章来源于星环官网安装手册&#xff09; 后面放置了视频和安装手册连接 1、硬件及环境要求 Docker17及以上版本&#xff0c;支持Centos&#xff0c;Ubuntu等系统&#xff08;注&#xff1a;这里我使用CentOS-7版本&#xff0c;最佳版本推荐为7.…

Linux基本命令篇 —— grep命令

grep是Linux/Unix系统中一个非常强大的文本搜索工具&#xff0c;它的名字来源于"Global Regular Expression Print"&#xff08;全局正则表达式打印&#xff09;。grep命令用于在文件中搜索包含特定模式的行&#xff0c;并将匹配的行打印出来。 目录 一、基本语法 二…

苍穹外卖问题系列之 苍穹外卖订单详情前端界面和网课给的不一样

问题 如图&#xff0c;我的前端界面和网课里面给的不一样&#xff0c;没有“申请退款”和一些其他的该有的东西。 原因分析 “合计”这一栏显示undefined说明我们的总金额没有输入进去。可以看看订单提交那块的代码&#xff0c;是否可以正确输出。还有就是订单详细界面展示这…

CppCon 2018 学习:EMULATING THE NINTENDO 3DS

我们来逐个分析一下这个 组件交互模型 和 仿真 & 序列化 的关系&#xff0c;特别是主线程&#xff08;Main Thread&#xff09;与其他系统组件之间的交互。 1. Main Thread — simple (basically memcpy) --> GPU Main Thread&#xff08;主线程&#xff09;负责游戏的…

[Python 基础课程]数字

数字 数字数据类型用于存储数值&#xff0c;比如整数、小数等。数据类型是不允许改变的&#xff0c;这就意味着如果改变数字数据类型的值&#xff0c;将重新分配内存空间。 创建数字类型的变量&#xff1a; var1 1 var2 10创建完变量后&#xff0c;如果想废弃掉这个变量&a…

Linux CentOS环境下Java连接MySQL数据库指南

文章目录 前言一、环境准备1.1 系统更新1.2 Java环境安装1.3 MySQL数据库安装1.4 下载JDBC驱动 二、编写Java程序2.1 代码如下2.2 编译和运行2.3 验证创建结果 三、代码上传至Gitee3.1 安装配置Git3.2 克隆仓库到本地3.3 添加Java项目文件3.4 提交代码到本地仓库3.5 推送到Gite…