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

聊天室项目开发——安装并使用gtest库以及spdlog日志组件

1.安装gtest库以及apdlog

        这里直接使用apt进行安装,一般来说是没有问题的,如果有问题可以先尝试更新apt,再不信就只能使用源码进行安装了,这里提一下就是如果使用源码安装,然后你的ubuntu机子是新机就什么都没有可能需要先安装cmake,make这些东西,不然你没有办法对源码进行编译以及安装,这个可以问问ai还是比较简单的。

sudo apt-get install libgtest-dev
sudo apt-get install libspdlog-dev

 2.gtest库的介绍以及使用

2.1 介绍

        GTest 是一个跨平台的 C++单元测试框架,由 google 公司发布。gtest 是为了在不同 平台上为编写 C++单元测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化等等测试所需的宏,以及全局测试,单元测试组件。

        其实说白了就是,我们平常对写的程序进行测试的时候,会通过打印来和自己的预期进行比对,来看是否符合预期,这个库就是提供了一个TEST宏函数以及一些比较函数,有ASSERT_系列和EXPECT_系列,ASSERT系列如果和预期不同就会退出这组测试,而EXPECT系列如果不符合预期依旧会继续进行。

        下面是所有的ASSERT系列函数,EXPECT_系列只需要将ASSERT换成EXPECT就行

2.2 简单使用

        再使用前我们需要进行初始化也就是testing::InitGoogleTest(&argc,argv);

        TEST宏函数的相关参数的解释

#include <gtest/gtest.h>
#include <iostream>//EQ:==,NE:!=,LT:<,GT:>,LE:<=,GE:>=  int add(int x,int y)
{return x+y;
}TEST(test1,add_test1)
{//EXPECT_系列宏,如果当前点检测失败则继续往下执行EXPECT_EQ(3,add(1,2));std::cout<<"test1"<<std::endl;//ASSERT_系列宏,如果当前点检测失败则不再往下执行ASSERT_EQ(4,add(2,2)-1);std::cout<<"test1_2"<<std::endl;
}int main(int argc,char *argv[])
{testing::InitGoogleTest(&argc,argv);  //将命令行参数传递给gtest   -- >>  框架初始化接口//运行所有测试案例return RUN_ALL_TESTS();
}
//makefile
main : main.cc g++ -std=c++17 $^ -o $@ -lgtest

3.spdlog的介绍和使用

3.1 spdlog介绍

        spdlog 是一个高性能、超快速、零配置的C++ 日志库,它旨在提供简洁的API 和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。以下是对spdlog 的详细介绍和使用方法。

        特点
        • 高性能:spdlog 专为速度而设计,即使在高负载情况下也能保持良好的性能。
        • 零配置:无需复杂的配置,只需包含头文件即可在项目中使用。
        • 异步日志:支持异步日志记录,减少对主线程的影响。
        • 格式化:支持自定义日志消息的格式化,包括时间戳、线程ID、日志级别等。
        • 多平台:跨平台兼容,支持Windows、Linux、macOS 等操作系统。
        • 丰富的 API:提供丰富的日志级别和操作符重载,方便记录各种类型的日志。

        

3.2 简单使用

        对于同步日志器我们在使用时需要先创建落地方向,可以有多个,这个落地方向其实就是往哪个地方输出,根据落地方向类的限制输出等级,可以完成输出不同的日志,比如我下面写的这个multi_sink_example这个函数内的日志器就有两个落地方,只有当日志的等级大于warn才会在标准输出上进行输出,而trace等级以上的都会往文件落地方向输出。

        异步日志器我注释写的比较详细,看了应该就明白了。

#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/async.h>
void multi_sink_example()
{// 创建一个标准输出的落地方向对象auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();// 该方向仅允许 warn 等级以上的日志输出console_sink->set_level(spdlog::level::warn);console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");// 创建一个文件输出的落地方向对象auto file_sink =std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/multisink.txt", true);// 该方向允许 trace 等级以上的日志输出file_sink->set_level(spdlog::level::trace);// 构造一个日志器对象,用于输出日志spdlog::logger logger("multi_sink", {console_sink, file_sink}); // 每个日志器都可以设置初步过滤等级,其次内部每个 sink 也可以设置自己独立的过滤等级logger.set_level(spdlog::level::debug);logger.set_pattern("%Y-%m-%d %H:%M:%S [%l] %v");logger.warn("this should appear in both console and file");logger.info("this message should not appear in the console, only in the file");
}
void async_example()
{// void init_thread_pool(size_t q_size, size_t thread_count);spdlog::init_thread_pool(32768, 1); // 设置默认线程池属性信息// 通过工厂模式创建异步日志记录器的同时,会在内部创建默认线程池作为异步线程auto async_logger =spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "logs/async_log.txt");async_logger->set_pattern("%Y-%m-%d %H:%M:%S [%l] %v");for (int i = 1; i < 101; ++i){// 需要注意的是,在多参数的时候,spdlog 并非使用 %s %d 这种通配符来匹配参数// 而是使用 {}, spdlog 可以自己识别数据类型async_logger->info("Async message #{} {}", i, "hello");}
}
int main()
{// multi_sink_example();async_example();return 0;
}

http://www.dtcms.com/a/500703.html

相关文章:

  • 桐乡建设局网站智能建站服务平台
  • Altium Designer(AD24)View视图功能总结
  • 国产麒麟系统门禁主板--XC3576IC,以AI芯赋能多元生物识别生态
  • 梅州做网站设计公司微信怎么建立公众号
  • 中国企业网络营销实例郑州网站优化平台
  • 关于建立网站的思路免费建立网站软件
  • 宁波网站建设详细内容在线课程设计
  • 网站建设代码下载大全wordpress左侧菜单
  • 商业网站建设规划书自我做t恤的网站
  • 企业网站备案名称要求做外汇网站做什么类型网站好
  • 能从源代码黑进网站修改数据吗字体升级wordpress
  • a站播放量最高的视频测评网站架构
  • java.text 包详解
  • 做贸易选哪家网站精品资源共享课网站建设 碧辉腾乐
  • Kubernetes日志管理:使用Loki进行日志采集
  • 代人做网站建设厅质监总站网站
  • claude-code使用figmamcp
  • 红黑树详细介绍(五大规则、保持平衡操作、Java实现)
  • 上海装修网站大全福田商城网站建设
  • 边学边用之Scrapy中使用xpath获取类元素问题
  • 网站怎样做seo南京seo网站优化
  • switch case语句 密集连续值 - 可能生成跳转表 汇编分析
  • 网站广告联盟平台wordpress评论优化
  • 怎么做营销网站棋牌网站开发需要多少钱
  • 怎么搞一个服务器建设网站中国美食网页设计模板
  • 网站内链 外链多语言商城网站开发
  • 网站建设中英文版广东智能网站建设费用
  • 深圳的seo网站排名优化wordpress群空间
  • Java学习之旅第三季-9:泛型擦除与堆污染
  • wordpress模板电子书下载站为什么网页在线视频会卡