是否可以使用某些宏禁用谷歌测试断言?

时间:2014-10-09 16:48:54

标签: 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];
}

我想为该程序提供2种不同的构建类型:

  1. 启用所有断言(调试类型)
  2. 禁用所有断言(发布类型)
  3. 有可能吗?

    也许可以重新定义宏EXPECT_TRUE

1 个答案:

答案 0 :(得分:0)

首先,我无法想象除了本地之外,想要做到这一点 使测试运行得更快,以获得一些更奇特的案例; EXPECT_TRUE等。仅适用于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。 (或者如果你真的想确定,你可以定义一个nullstream 阶级,输出到空气中。但在这种情况下,和 输出中的转换仍将发生;在未开封的 std::ofstream,它处于错误状态的事实会抑制 转换。)