C++ 是否可以使用某些宏禁用google测试断言?

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等仅在谷歌测试中有用 并且只应出现在单元测试中,而不应出

假设我有一个带循环的热函数,其中有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;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宏。