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

24 篇文章 0 订阅
8 篇文章 0 订阅

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

背景介绍和使用技巧

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

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

     举例来说就是下面这种:

#define TZ_TEST

#ifdef TZ_TEST
// …… 测试性代码
#else
// …… 正式提交的逻辑代码
#endif

#if TZ_MODE == TZ_DEBUG
// debug模式下才有的代码
#endif

示例代码

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

main.cpp:


// …… 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文件中将这个宏定义好,就能实现计算逻辑的整体切换了。当我需要提交代码的时候,我只需要把加有测试标记的地方的代码去掉即可。

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

实际项目应用

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

	    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漏了什么东西,在一个整体的逻辑下可不如当时一边写一边测来的方便哦。

     另外一个例子来说:

#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的模式下,那么就不做这个事情。

个人格言

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值