首页
关于
友链
其它
统计
壁纸
更多
留言
Search
1
cgroup--(4)cgroup v1和cgroup v2的详细介绍
7,565 阅读
2
修改Linux Kernel defconfig的标准方法
7,117 阅读
3
Android系统之VINTF(1)manifests&compatibility matrices
6,704 阅读
4
使用git生成patch和应用patch
4,614 阅读
5
c语言的__attribute__
3,377 阅读
默认分类
文章收集
学习总结
算法
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
Rust
工具
软件工具
Bug
COMPANY
登录
Search
标签搜索
Rust
shell
Linux
c
uboot
Vim
vintf
Linux驱动
Android
device_tree
git
DEBUG
arm64
学习笔记
makefile
链表
数据结构
IDR
内核
ELF
adtxl
累计撰写
384
篇文章
累计收到
17
条评论
首页
栏目
默认分类
文章收集
学习总结
算法
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
Rust
工具
软件工具
Bug
COMPANY
页面
关于
友链
其它
统计
壁纸
留言
搜索到
135
篇与
的结果
2025-07-14
gtest的简单使用
1. 安装本地使用ubuntu的环境,可以直接使用apt安装预编译的库。使用下面的命令sudo apt update sudo apt update # 如果需要 Google Test 的测试工具(如 gtest-config),可以额外安装 googletest: sudo apt install googletest 安装完成后,Google Test 的头文件通常位于 /usr/include/gtest/,静态库文件(如 libgtest.a 和 libgtest_main.a)位于 /usr/lib 或 /usr/lib/x86_64-linux-gnu/(具体路径取决于 Ubuntu 版本)。使用 Google Test 时,编译器需要链接 libgtest 和 libgtest_main,并且通常需要链接 pthread 库。例如,在编译测试程序时:g++ -std=c++17 test_file.cc -lgtest -lgtest_main -pthread -o test2. 使用Google Test的CMake配置如果你使用 CMake 构建项目,推荐在 CMakeLists.txt 中配置 Google Test。以下是一个示例:cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找 GTest find_package(GTest REQUIRED) include_directories(${GTEST_INCLUDE_DIRS}) # 添加测试可执行文件 add_executable(my_test test_file.cc) target_link_libraries(my_test GTest::GTest GTest::Main pthread)运行以下命令构建和测试:mkdir build cd build cmake .. make ./my_test3. 断言在gtest中,通过断言(assertion)来判断代码中实现的功能是否符合预期。断言的结果分为success、non-fatal failture和fatal failture。根据断言失败的种类,gtest提供了两种断言函数:success:即断言成功,程序的行为符合预期,程序继续向下允许。non-fatal failure:即断言失败,但是程序没有直接crash,而是继续向下运行。gtest提供了宏函数EXPECT_XXX(expected, actual):如果condition(expected, actual)返回false,则EXPECT_XXX产生的就是non-fatal failure错误,并显示相关错误。fatal failure:断言失败,程序直接crash,后续的测试案例不会被运行。gtest提供了宏函数ASSERT_XXX(expected, actual)。在写单元测试时,更加倾向于使用EXPECT_XXX,因为ASSERT_XXX是直接crash退出的,可能会导致一些内存、文件资源没有释放,因此可能会引入一些bug。具体的EXPECT_XXX、ASSERT_XXX函数及其判断条件,如下所示断言验证条件EXPECT_TRUE(condition)condition 为真EXPECT_FALSE(condition)condition 为假EXPECT_EQ(val1, val2)val1 == val2EXPECT_NE(val1, val2)val1 != val2EXPECT_LT(val1, val2)val1 < val2EXPECT_LE(val1, val2)val1 <= val2EXPECT_GT(val1, val2)val1 > val2EXPECT_GE(val1, val2)val1 >= val2EXPECT_STREQ(str1, str2)C字符串 str1 和 str2 相等EXPECT_STRNE(str1, str2)C字符串 str1 和 str2 不相等EXPECT_STRCASEEQ(str1, str2)C字符串 str1 和 str2 相等(忽略大小写)EXPECT_STRCASENE(str1, str2)C字符串 str1 和 str2 不相等(忽略大小写)EXPECT_FLOAT_EQ(val1, val2)两个 float 值 val1 和 val2 近似相等EXPECT_DOUBLE_EQ(val1, val2)两个 double 值 val1 和 val2 近似相等EXPECT_NEAR(val1, val2, abs_error)val1 和 val2 之差的绝对值不超过 abs_errorEXPECT_THROW(statement, exception_type)statement 抛出 exception_type 类型的异常EXPECT_ANY_THROW(statement)statement 抛出任何类型的异常EXPECT_NO_THROW(statement)statement 不抛出任何异常EXPECT_THAT(val, matcher)val 满足匹配器 matcher完整列表参考:https://google.github.io/googletest/reference/assertions.html断言宏返回一个ostream对象,可以使用<<运算符输出自定义的失败信息。EXPECT_TRUE(my_condition) << "my condition is not true";4. TEST宏TEST宏用于定义一个测试,语法如下TEST(TestSuiteName, TestName) { test body }其中第一个参数是测试套件名称,第二个参数是测试用例名称,二者都必须是合法的C++标识符,并且不应该包含下划线。测试体可以包含断言和任何C++语句。如果任何断言失败或者崩溃,则整个测试失败,否则成功。注:TEST()宏实际上定义了一个名为TestSuiteName_TestName_Test的类,该类继承了::testing::Test类并覆盖了成员函数TestBody(),测试体就是其函数体。其(简化的)定义如下:#define TEST(TestSuiteName, TestName) \ class TestSuiteName##_##TestName##_Test : public ::testing::Test { \ private: \ void TestBody() override; \ }; \ void TestSuiteName##_##TestName##_Test::TestBody()5. TEST_F宏test fixture,即测试夹具,可以让多个测试用例共用相同的的对象或数据。要创建一个fixture,只需继承::testing::Test类,在类中定义要使用的对象,在默认构造函数或SetUp()函数中进行初始化,在析构函数或TearDown()函数中进行清理(释放资源),此外还可以定义需要共用的函数。如下所示:// The fixture for testing class Foo. class FooTest : public ::testing::Test { protected: FooTest() { // You can do set-up work for each test here. } ~FooTest() override { // You can do clean-up work that doesn't throw exceptions here. } void SetUp() override { // Code here will be called immediately after the constructor (right before each test). } void TearDown() override { // Code here will be called immediately after each test (right before the destructor). } // Class members declared here can be used by all tests in the test suite for Foo. };TEST_F语法如下:TEST_F(TestFixtureName, TestName) { test body }其中TestFixtureName既是fixture类名,也是测试套件名,在测试体中可以使用fixture类定义的数据成员。对于每一个使用TEST_F()定义的测试,GoogleTest都会创建一个新的 fixture对象,调用SetUp()初始化,运行测试,调用TearDown()清理,最后删除fixture对象。同一个测试套件中的不同测试使用不同的fixture对象,因此一个测试所做的改变不影响其他测试。注:TEST_F()宏与TEST()唯一的区别是定义的类继承fixture类而不是::testing::Test:#define TEST_F(TestFixtureName, TestName) \ class TestFixtureName##_##TestName##_Test : public TestFixtureName { \ private: \ void TestBody() override; \ }; \ void TestFixtureName##_##TestName##_Test::TestBody()
2025年07月14日
14 阅读
0 评论
0 点赞
2025-06-11
TMUX的使用
1. tmux的作用命令行的典型用法是打开终端(terminal)后,在里面输入指令。用户的这种与计算机交互的手段,称为会话(session)。在会话中,通过命令行启动的所有进程均与会话进程绑定。当会话进程终止时,该会话启动的所有进程也会随之强行结束。一点最常见的例子就是通过SSH连接到远程计算机。当SSH连接因为网络等原因断开时,那么SSH会话就被终止,这次会话启动的任务也会被强制结束。为了解决这个问题,一种手段就是用户终端窗口与会话“解绑”。即关闭用户端窗口,仍然维持该会话,进而保证用户进程不变。tmux就是这样一款将会话与窗口“解绑”的工具。(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。(2)它可以让新窗口"接入"已经存在的会话。(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。(4)它还支持窗口任意的垂直和水平拆分2. 安装使用下面的命令# Ubuntu 或 Debian $ sudo apt-get install tmux # CentOS 或 Fedora $ sudo yum install tmux # Mac $ brew install tmux3. 使用直接在终端中输入tmux指令,即可进入tmux窗口。上面命令会启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。按下Ctrl+d或者输入exit命令,就可以退出Tmux窗口。4. 快捷方式Tmux有大量的快捷键。所有的快捷键都要使用Ctrl+b作为前缀唤醒。$ Ctrl+b s:可以快捷地查看并切换会话 $ Ctrl+b %:划分左右两个窗格。 $ Ctrl+b ":划分上下两个窗格。 $ Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。 $ Ctrl+b ;:光标切换到上一个窗格。 $ Ctrl+b o:光标切换到下一个窗格。 $ Ctrl+b {:当前窗格左移。 $ Ctrl+b }:当前窗格右移。 $ Ctrl+b Ctrl+o:当前窗格上移。 $ Ctrl+b Alt+o:当前窗格下移。 $ Ctrl+b x:关闭当前窗格。 $ Ctrl+b !:将当前窗格拆分为一个独立窗口。 $ Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。 $ Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。 $ Ctrl+b q:显示窗格编号。参考https://www.ruanyifeng.com/blog/2019/10/tmux.htmlhttps://docs.hpc.sjtu.edu.cn/login/tmux.html
2025年06月11日
27 阅读
0 评论
0 点赞
2024-11-22
Linux Kernel 之九 详解 virtio-net 源码框架、执行流程
转载自https://blog.csdn.net/ZCShouCSDN/article/details/132361829
2024年11月22日
350 阅读
0 评论
0 点赞
2024-11-04
ARMv9--机密计算架构(CCA)深入理解
转载自https://developer.aliyun.com/article/1205005
2024年11月04日
185 阅读
0 评论
0 点赞
2024-10-30
一些信息安全中术语的理解
整理自网络
2024年10月30日
70 阅读
0 评论
0 点赞
2024-10-30
ARM Trusted Firmware分析——镜像签名/加密/生成、解析/解密/验签
转载自https://www.cnblogs.com/arnoldlu/p/14332530.html跟着博主的文章把安全启动早期的工作过一下
2024年10月30日
107 阅读
0 评论
0 点赞
2024-10-29
长安欧尚Z6 idd 搭电启动
长时间不开车的小电瓶可能就亏电了,搭电方式如下:从发动机保险盒搭电,参考如下:
2024年10月29日
583 阅读
0 评论
0 点赞
2024-10-22
Linux - Devicetree规范: 中断和中断映射
转载自https://blog.csdn.net/guoqx/article/details/124241733
2024年10月22日
209 阅读
0 评论
0 点赞
2024-10-15
流量卡
说明:流量卡确实都是正规的卡,不是什么物联网卡,我也买过so,需本人实名申请激活。申请身份证信息需和激活身份证信息需保持一致。大部分人使用这些流量卡一般是把主卡申请保号后用来接验证码,用这个卡只当流量卡来用所有套餐按照要求参加首次充值规定的金额后,才可以享受优惠(请仔细查阅每个卡的详情界面)
2024年10月15日
164 阅读
0 评论
0 点赞
2024-10-09
virtio-blk简介
暂无简介
2024年10月09日
51 阅读
0 评论
0 点赞
1
2
...
14