考虑我有热水功能与一个循环,并在它里面GTEST断言:是否有可能禁用一些宏谷歌测试断言?
for (i = 0; i < BIG_NUMBER; i++)
{
EXPECT_TRUE(a[i] > 0.) << "a[i] = " << a[i];
c[i] = a[i] + b[i];
}
我想有2种不同的生成类型的程序:
- 启用所有断言(调试类型)
- 与所有断言禁用(发布类型)
这可能吗?
也许有可能重新定义宏EXPECT_TRUE
?
考虑我有热水功能与一个循环,并在它里面GTEST断言:是否有可能禁用一些宏谷歌测试断言?
for (i = 0; i < BIG_NUMBER; i++)
{
EXPECT_TRUE(a[i] > 0.) << "a[i] = " << a[i];
c[i] = a[i] + b[i];
}
我想有2种不同的生成类型的程序:
这可能吗?
也许有可能重新定义宏EXPECT_TRUE
?
首先,我无法想象要做到这一点,除了本地, 使测试运行得更快,以得到一些更奇特的情况; EXPECT_TRUE
et al。仅适用于Google测试 环境,并且应该只出现在单元测试中,而不是出现在代码的 正文中。
在本地,我会使用一个单独的宏,(这样的人读的 码立刻知道这是一个条件测试),说 COND_EXPECT_TRUE
(有条件EXPECT_TRUE),定义 是这样的:
#ifdef ALL_TESTS
#define COND_EXPECT_TRUE EXPECT_TRUE
#else
#define COND_EXPECT_TRUE dummyOutput
#endif
,其中dummyOutput
是未打开的std::ofstream
某处。 (或者如果你真的想确定,你可以定义一个输出到空气中的类,但是在这种情况下,输出中的转换仍然会发生;在未打开的 std::ofstream
中,事实上它处于错误状态禁止 的转换。)
这就是我想听到的。 Gtest宏不应该在应用程序代码中使用。 – 2014-10-10 12:43:28
是否在调试模式下编译并在发布模式下禁用时启用该断言? #ifdefs有什么问题?你当然可以改变gtest的来源,但是#ifdefs会是一个更干净的方式来做到这一点 – 2014-10-09 16:57:18
我没有使用谷歌测试断言,但看着你的代码,你必须不仅禁用测试,但你也必须将其定义为支持重载的<< <<运算符的东西。 – 2014-10-09 16:57:21
@Marco A.,当然,我打算使用'#ifdef'来重新定义宏。 – 2014-10-09 17:08:44