C++ 是否可以使用某些宏禁用google测试断言?
假设我有一个带循环的热函数,其中有gtest断言:C++ 是否可以使用某些宏禁用google测试断言?,c++,macros,googletest,C++,Macros,Googletest,假设我有一个带循环的热函数,其中有gtest断言: for (i = 0; i < BIG_NUMBER; i++) { EXPECT_TRUE(a[i] > 0.) << "a[i] = " << a[i]; c[i] = a[i] + b[i]; } for(i=0;i0。)首先,我无法想象要这样做,除非是在本地 让测试运行得更快,以达到一些更奇特的情况; EXPECT\u TRUE等仅在谷歌测试中有用 并且只应出现在单元测试中,而不应出
for (i = 0; i < BIG_NUMBER; i++)
{
EXPECT_TRUE(a[i] > 0.) << "a[i] = " << a[i];
c[i] = a[i] + b[i];
}
for(i=0;i 希望是真的(a[i]>0。)首先,我无法想象要这样做,除非是在本地
让测试运行得更快,以达到一些更奇特的情况;
EXPECT\u TRUE
等仅在谷歌测试中有用
并且只应出现在单元测试中,而不应出现在
代码的主体
在本地,我会使用一个单独的宏(以便有人阅读
代码立即知道这是一个条件测试),比如
COND\u EXPECT\u TRUE
(对于条件EXPECT\u TRUE),已定义
比如:
#ifdef ALL_TESTS
#define COND_EXPECT_TRUE EXPECT_TRUE
#else
#define COND_EXPECT_TRUE dummyOutput
#endif
,其中dummyOutput
是未打开的std::of stream
某处。
(或者,如果您确实想确定,可以定义nullstream
类,输出到稀薄的空气中。但在本例中
输出中的转换仍将发生;在未打开的
std::ofstream
,它处于错误状态的事实禁止
转换。)你的意思是在调试模式下编译时启用断言,在发布模式下禁用断言吗?#ifdefs有什么问题?你当然可以更改gtest的源代码,但是#ifdefs将是一种更干净的方法。我没有使用google测试断言,但看看你的代码,你不仅要禁用测试,而且还要禁用测试要将它定义为支持重载的@Marco A.,当然是的,我想用#ifdef
s来重新定义宏。@R Sahu,是的,也许是这样:但我想知道是否有一些常用的技术。因为禁用调试输出需要一些额外的实现,这看起来很奇怪。这就是我想要的不应在应用程序代码中使用Gtest宏。