我是靠谱客的博主 生动高跟鞋,这篇文章主要介绍C++ 技巧分享 —— 定义一些测试宏来区分正常逻辑代码和编写中间过程中希望加入的测试代码定义一些测试宏来区分正常逻辑代码和编写中间过程中希望加入的测试代码个人格言,现在分享给大家,希望可以做个参考。

文章目录

  • 定义一些测试宏来区分正常逻辑代码和编写中间过程中希望加入的测试代码
    • 背景介绍和使用技巧
    • 示例代码
    • 实际项目应用
  • 个人格言

定义一些测试宏来区分正常逻辑代码和编写中间过程中希望加入的测试代码

背景介绍和使用技巧

     在我日常开发中,遇到了一些中间过程需要先写一些测试代码,或者是只有在Debug模式下才打log啊之类的操作,那么又不能破坏原先的开发的逻辑的情况下,那么就需要使用到一些宏定义来区分正常提交的逻辑代码和中间过程的测试代码。

     这样就可以让我们的测试代码和Debug代码与最终需要提交的代码逻辑并存,这是一种比较有意思的技巧,能够让你在编写代码过程中对于一些中间状态更加了解和得心应手。

     举例来说就是下面这种:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
#define TZ_TEST #ifdef TZ_TEST // …… 测试性代码 #else // …… 正式提交的逻辑代码 #endif #if TZ_MODE == TZ_DEBUG // debug模式下才有的代码 #endif

示例代码

     对于这样一种使用的技巧,可以参考下面某个Cpp文件中我简单的写的一个有意思的加法的函数来了解:

main.cpp:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// …… some other codes. #define TZ_WINDOW_TEST int funcyAddMethod(int a, int b) { #ifdef TZ_WINDOW_TEST return a + b; #else if (a < b) { return b; } else if (a == b) { return a + b; } else { return a; } #endif }

     不难发现,其实就是我如果希望这个函数调用我编写过程中的运行时效果,就是自己在这个Cpp文件中将这个宏定义好,就能实现计算逻辑的整体切换了。当我需要提交代码的时候,我只需要把加有测试标记的地方的代码去掉即可。

     不过如果希望保留中间过程的测试逻辑代码,给以后的人看这东西是经历了怎样的想法来的,只需要把宏定义去掉之后,保留代码逻辑结构即可。这样别人也能学习我们在编写代码过程中间采用的一些暂时的方案,更加容易了解你这个最终方案是怎么得来的,这是一个比较好的习惯个人认为。

实际项目应用

     那么在实际的项目中,我就有些地方用到了这个,在此举几个简单的实际应用的例子供大家参考,这也是一种把测试的思维带入到开发过程中的一种思想,可以平时自己锻炼锻炼,话不多说,上代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
connect(ui->pushButton, &QPushButton::clicked, [this](bool checked) { #ifdef TZ_WINDOW_TEST QMenu * menu = new QMenu(); qDebug() << "Use Test the button states:" << checked; menu->move(mapToGlobal(ui->pushButton->rect().bottomRight() + QPoint(menu->rect().width(), menu->rect().height()))); menu->exec(); #else ui->pushButton->setChecked(checked); QMenu * menu = new QMenu(); menu->move(mapToGlobal(ui->pushButton->rect().bottomRight() + QPoint(menu->rect().width(), menu->rect().height()))); ui->pushButton->setMenu(menu); #endif });

     不难看出,我上面想干的事其实就是测试的时候直接显示一个menu来看看是个啥效果,有没有少了什么项, 后面确认没问题了,直接酒设置进去了,不用显示,我就能保证我设置进去的menu是我经过验证它是显示项是对的menu。不然啊,这样的代码你得等写完了再去测,万一Menu漏了什么东西,在一个整体的逻辑下可不如当时一边写一边测来的方便哦。

     另外一个例子来说:

复制代码
1
2
3
4
5
6
7
8
#if TZ_BUILD_MODE == TZ_BUILD_DEBUG UiElement * ele = new UiElement(); ele->setText("XXX"); ele->setIcon("ICON1001"); UiMenu * testMenu = UiMainWindow::GetMenu(TZ_T("{3B8B4661-64C4-463F-B074-404A8C0063E7}"); ele->setMenu(testMenu); #endif

     很明显这个例子就是想在Debug模式下我才装载某个选项显示某些东西,非Debug的模式下,那么就不做这个事情。

个人格言

    用心去感受你自己需要坚持的生活,未来慢慢会给你答案的。

最后

以上就是生动高跟鞋最近收集整理的关于C++ 技巧分享 —— 定义一些测试宏来区分正常逻辑代码和编写中间过程中希望加入的测试代码定义一些测试宏来区分正常逻辑代码和编写中间过程中希望加入的测试代码个人格言的全部内容,更多相关C++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部