windows下配置gtest及实例

2023-11-08

1. 安装gtest

  
  将gtest压缩文件下载放到指定位置,进行解压缩,可看到如下结果;安装源码:https://github.com/smarr/googletest

这里写图片描述

2. 配置工程

  1. 将gtest的头文件添加到工程
    项目属性 ——— C/C++常规——–附加包含目录———编辑———添加头文件

    这里写图片描述

这里写图片描述

  1. 将动态库进行链接

    项目属性——-链接器—–附加依赖项—–编辑—–添加动态库的路径

这里写图片描述

动态库所在位置
  在你的gtest配置文件下的msvc/gtest中有两个文件,一个是Debug,一个是Release,将其中一个文件中的gtest.lib 和gtest_main.lib的路径添加到附加依赖项,我这里添加的是Release版本
  
这里写图片描述

  1. 修改运行库

属性—–C/C++ 下的代码生成 —— 运行库 —– 选择方式

这里的方式有四种,为下表,选择时,应对应起来,如果运行中出现如下图情况,则选择对应的运行库

这里写图片描述

名称 对应项
多线程调试Dll (/MDd) MD_DynamicDebug
多线程Dll (/MD) MD_DynamicRelease
多线程(/MT) MD_StaticRelease
多线程(/MTd) MD_StaticDebug

这里写图片描述

3. 进行单元测试

  1. 测试方法
  1. 引入gtest头文件,#include <gtest/gtest.h>
  2. 采用宏来进行测试
    TEST(test_case_name,test_name)

    理解:将一组有关联的测试用例放在了一组测试里面
    test_case_name: 针对谁的测试,这里是HuffmanTree的创建
    test_name:针对某一个部分的测试,例如:针对创建节点的测试等

对于文件压缩各个单元的测试:

1.对Huffman节点的测试

#define _CRT_SECURE_NO_WARNINGS 1

#include "HuffmanTree.h"

#include <gtest/gtest.h>//引入gtest库

//构造哈夫曼树的节点
TEST(huffmantest, node)
{
    typedef HuffmanTreeNode<int> Node;
    Node* newnode = new Node(1);
    ASSERT_EQ(newnode->_w, 1);
    ASSERT_FALSE(newnode->_left);
    ASSERT_FALSE(newnode->_right);
}


int main(int argc, char* argv[])
{
    testing::InitGoogleTest(&argc, argv);
    int a = RUN_ALL_TESTS();
    //Start();

    system("pause");
    return 0;
}

结果:

正确结果:

这里写图片描述

错误结果:

这里写图片描述

2.Huffman的创建

TEST(huffmantest, constructhuffmantree)
{
    HuffmanTree<int> tree1;
    ASSERT_FALSE(tree1.GetRoot());//开始为空树

    int a[] = { 4, 3, 2, 1 };
    int valiad = 0;
    HuffmanTree<int> tree(a, sizeof(a) / sizeof(a[0]), valiad);
    typedef HuffmanTreeNode<int> Node;

    Node* root = tree.GetRoot();
    ASSERT_EQ(root->_w, 10);
    ASSERT_EQ(root->_left->_w, 4);
    ASSERT_EQ(root->_right->_w, 6);

    Node* Left = root->_left;
    Node* Right = root->_right;
    ASSERT_FALSE(Left->_left);
    ASSERT_FALSE(Left->_right);
    ASSERT_EQ(Right->_left->_w, 3);
    ASSERT_EQ(Right->_right->_w, 3);

    Node* pRight = Right->_right;
    ASSERT_EQ(pRight->_left->_w, 1);
    ASSERT_EQ(pRight->_right->_w, 2);
}

测试结果:

这里写图片描述

3. 统计文件中的次数

//统计次数
TEST(FileProcessTestCase, GetCountChar)
{
    FileCompress fc;
    CharInfo info;
    for (size_t i = 0; i < 256; ++i)
    {
        info = fc.Get(i);
        ASSERT_EQ(info._ch, (char)i);
    }
}

4. 压缩之前确定压缩文件名

//压缩前的准备工作
TEST(FileProcessTestCase, CompressDo)
{
    FileCompress fc;
    char*  file = "C:\\Users\\lenovo\\Desktop\\1.txt";

    //压缩文件名
    char compressfile[100] = { 0 };

    //string name = fc.CompressDo(file, compressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.huffman");//覆盖


    //string name1 = fc.CompressDo(file, compressfile);;
    //ASSERT_EQ(name1, "C:\\Users\\lenovo\\Desktop\\2.huffman");//重命名

    //string name = fc.CompressDo(file, compressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.huffman");//指定路径存在替换

    //string name = fc.CompressDo(file, compressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.huffman");//指定路径存在重命名

    //string name = fc.CompressDo(file, compressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.huffman");//指定路径不存在
}

5. 解压缩之前确定解压后的文件名

//解压缩前的准备工作
TEST(FileProcessTestCase, UnCompressDo)
{
    FileCompress fc;
    char*  file = "C:\\Users\\lenovo\\Desktop\\1.huffman";

    //压缩文件名
    char Uncompressfile[100] = { ".txt" };

    //string name = fc.UnCompressDo(file, Uncompressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.txt");//覆盖


    //string name1 = fc.UnCompressDo(file, Uncompressfile);;
    //ASSERT_EQ(name1, "C:\\Users\\lenovo\\Desktop\\2.txt");//重命名

    //string name = fc.UnCompressDo(file, Uncompressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.txt");//指定路径存在替换

    //string name = fc.CompressDo(file, compressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\2.txt");//指定路径存在重命名

    //string name = fc.CompressDo(file, Uncompressfile);;
    //ASSERT_EQ(name, "C:\\Users\\lenovo\\Desktop\\1.txt");//指定路径不存在
}

6. 压缩与解压缩

TEST(FileProcessTestCase, Compress)
{
    FileCompress fc;
    char* file = "C:\\Users\\lenovo\\Desktop\\1.huffman";
    string newfile = fc.UnCompress(file);

    FILE* fnew;
    fopen_s(&fnew, newfile.c_str(), "rb");

    ifstream ifs(newfile.c_str(), ios_base::in | ios_base::binary);//打开文件,aaabbbccd

    char ch;
    ifs.get(ch);
    ASSERT_EQ(ch, 'a');
    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'a');
    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'a'); 
    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'a'); 

    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'b');
    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'b'); 
    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'b'); 


    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'c'); 
    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'c');

    ch = ' ';
    ifs.get(ch);
    ASSERT_EQ(ch, 'd');
}

文件压缩源码及测试源码:https://github.com/zy01093017/HuffmanFileCompress/tree/master

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows下配置gtest及实例 的相关文章

  • 如何从该 Voronoi 图数据中获取单元格字典?

    使用找到的voronoi delaunay图生成库在这个节目中 http sourceforge net projects mapmanager 这是基于 财富 最初的实施他的算法 http en wikipedia org wiki Fo
  • 用 C# 启动 Windows 服务

    我想启动一个刚刚安装的Windows服务 ServiceBase ServicesToRun if bool Parse System Configuration ConfigurationManager AppSettings RunSe
  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • 我们如何将数据从一个打开的表单传递到另一个打开的表单?

    winform中如何将数据从一个窗体传递到另一个打开的窗体 在 Windows 应用程序中 一个窗体打开另一个窗体 当我在父表单中输入一些数据时 这些数据将立即反映在另一个子表单中 这将如何发生 取决于你想要多花哨 最简单的方法就是直接调用
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 在桌面应用程序中,类库的连接字符串存储在哪里?我可以在app.config中使用吗?

    我是桌面应用程序开发的新手 目前正在使用分层架构 用户界面 DAL BLL 构建桌面应用程序 在 Web 开发中 我曾经将连接字符串存储在 web config 中 我的类库从那里访问它 请指导我在桌面应用程序中如何以及在何处存储 DAL
  • 有没有办法使 C90 标准中的枚举无符号? (符合 MISRA-C 2004 标准)

    我正在尝试找到一种使枚举 无符号 的方法 enum x1 0 x2 x3 uint8 t x2 lt PC LINT MISRA C 2004 will complain about mixing signed and unsigned h
  • Entity Framework 4.1 RC:Code First EntityTypeConfiguration 继承问题

    我尝试使用通用的 EntityTypeConfiguration 类来配置所有实体的主键 以便每个派生的配置类不会重复自身 我的所有实体都实现一个公共接口 IEntity 它表示每个实体必须有一个 int 类型的 Id 属性 我的配置基类如
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 控制器中的异常处理 (ASP.NET MVC)

    当您自己的代码抛出异常并从控制器中的操作调用时 应该如何处理 我看到很多最佳实践的例子 其中根本没有 try catch 语句 例如 从存储库访问数据 public ViewResult Index IList
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • std::string 在 Visual Studio 上的具体行为?

    我有一个项目需要读取 写入大文件 我决定使用 ifstream read 将这些文件一次性放入内存中 放入 std string 中 这似乎是在 C 中执行此操作的最快方法 http insanecoding blogspot com 20
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对

随机推荐

  • 【直接收藏】前端 VUE 高阶面试题(一)

    1 说说vue动态权限绑定渲染列表 权限列表渲染 首先请求服务器 获取当前用户的权限数据 比如请求 this http get rights list 获取到权限数据之后 在列表中使用v if v if else的组合来展示不同的内容
  • 性能测试常见问题分析

    性能测试常见问题分析 1 请你个人描述一下性能测试的意义和作用 说出因性能不良造成的质量事故 2 如何进行性能测试 请说出整体的性能测试流程 a 分析测试范围 测试对象 如频繁使用的功能 频繁调用的接口 大量数据库读写操作多的功能 大量读写
  • 信息组织川大972

    网络信息组织 1 网络信息环境 1 1 网络发展的三个阶段 2 语义网信息组织 2 1 万维网与语义网 2 2 语义网技术架构 2 3 本体 2 4 关联数据 2 5 网站信息架构 3 Web2 0信息组织方法 3 1 标签法 3 2 Wi
  • 多元Huffman编码问题

    题目链接 题意 最多可以让k堆合并 每一次合并的花费为河合并堆的数量 问最多和最少的花费 题解 最少的花费一定是每次合并的堆数尽可能多 这样我们就会减少前面已经合并的堆的重复计算 所以 每次合并k堆时最少 每次合并2堆时最大 另外 最少的时
  • [WTL] STLport安装指南

    STLport安装指南STLport 4 6 是完全兼容ANSI C 标准的类库 This distribution contains STLport sources only no binaries To use STLport iost
  • Word文件删除后怎么恢复?好用的恢复方法分享

    Word文件删除后怎么恢复 在工作和学习的过程中 我们难免会遇到丢失数据的情况 比如有时候不小心删除了Word文件 或者Word文件在操作过程中意外卡顿导致丢失 有什么好方法恢复呢 下面就一起来了解下 遇到Word文件数据丢失不要慌张 首先
  • Java项目的开发流程

    一个java开发项目过程 1 项目启动 1 项目组成立 公司成员 客户成员 2 制定项目预期目标 3 制定项目计划周期 4 建立好项目组成员沟通机制 2 需求调研 1 创建调研计划 协调调研时间 2 收集客户资料 获取客户需求 所有的资料都
  • Redis缓存雪崩、穿透、击穿原因分析和解决方案,附Redis管道使用技巧

    先给大家附上其他几篇文章 感兴趣的自行开车导航 Redis过期策略和持久化机制全面揭秘 教你如何合理配置 深入浅出Redis 一 从版本特性到数据类型到线程模型 带你了解Redis的核心特性和应用场景 一次redis OOM问题分析解决 r
  • 阿里云ECS漏洞修复简单办法

    阿里云的安全检测功能会每天检测主机上的漏洞 然后短信推送 让你试用漏洞修复功能 或购买修复功能 其实不需要购买 在主机上执行 apt upgrade 或者 yum upgrade 就自动修复了 其实就是更新软件包 更新内核 然后重启就可以了
  • LeetCode-738

    738 单调递增的数字 给定一个非负整数 N 找出小于或等于 N 的最大的整数 同时这个整数需要满足其各个位数上的数字是单调递增 当且仅当每个相邻位数上的数字 x 和 y 满足 x lt y 时 我们称这个整数是单调递增的 Example
  • 油盐微服务——负载均衡Ribbon

    文章目录 客户端负载均衡 RestTemplate详解 Spring Cloud Ribbon 是一个基于http和tcp的客户端 负载均衡工具 它 不需要像服务注册中心那样 独立部署 它几乎存在于每一个Spring Cloud构建的微服务
  • ubuntu16.04 从源码安装opencv4.0 支持anaconda3.5

    step1 安装依赖库 sudo apt get install build essential cmake pkg config sudo apt get install libjpeg8 dev libtiff5 dev libjasp
  • 【解析与反思】leetcode 1219. 黄金矿工 DFS 解法(C++)

    目录 前言 一 原题 二 基本思想 三 代码实现 四 代码优化 五 Dijktra 算法思考 前言 本文采用 DFS 算法求解问题 针对提交过程中遇到了超时的问题做出了分析和调试 供大家参考 一 原题 你要开发一座金矿 地质勘测学家已经探明
  • js_moment

    js 一 moment js Moment js是一个轻量级的JavaScript时间库 它方便了日常开发中对时间的操作 提高了开发效率 日常开发中 通常会对时间进行下面这几个操作 比如获取时间 设置时间 格式化时间 比较时间等等 下面就是
  • pandas中文本数据的拆分和提取

    本文主要分享文本数据的拆分 提取合并 为下一步可视化分析做好准备 数据来源于boss与拉勾网数据分析岗位的招聘信息 拉勾网的爬取方法见我的 Python selenium beautifulsoup 登录爬取拉勾网 登录爬取拉勾网2 0 P
  • discuz!代码内置颜色大全(收藏)

    加闪烁字 light 文字 light 加文字特效 shadow 255 red 2 文字 shadow 在标签的中间插入文字可以实现文字阴影特效 shadow内属性依次为宽度 颜色和边界大小 贴图
  • postgresql-索引与优化

    postgresql 索引与优化 索引简介 索引类型 B 树索引 哈希索引 GiST 索引 SP GiST 索引 GIN 索引 BRIN 索引 创建索引 唯一索引 多列索引 函数索引 部分索引 覆盖索引 查看索引 维护索引 删除索引 索引简
  • linux宝塔站点无法通过本机IP访问,宝塔面板禁止通过ip访问站点的设置方法

    Loading 1 宝塔面板 首先新建一个网站 比如 xxx com 设置默认站点为 xxx com 所有未在面板绑定的域名都会访问到这个默认站点 修改xxx com 站点配置文件在server name xxxxx语句下加入 gt ret
  • MFC之标签控件26

    1 标签控件 1 先创建基于对话框的项目 2 添加TabControl控件到对话框 3 由于这个标签控件是唯一需要添加额外代码的 所以我们需要添加额外的代码进去项目当中 TabSheet h if defined AFX TABSHEET
  • windows下配置gtest及实例

    1 安装gtest 2 配置工程 3 进行单元测试 1 安装gtest 将gtest压缩文件下载放到指定位置 进行解压缩 可看到如下结果 安装源码 https github com smarr googletest 2 配置工程 将gtes