如何在调试版本中测试断言,但在发布中返回值?

时间:2017-10-20 08:04:55

标签: c++ unit-testing debugging googletest

我想测试一个函数:

#include <cassert>

int my_func(int myParam) {
    int ret = 0
    if (myParam >= 10) {
        assert(false);
        // Logger call like `qCritical << "myParam is too big. Returning 0";`
    } else {
        ret = myParam * 2;
    }
    return ret;
}

assert()仅在调试版本中启用。 我想编写一些测试,通过测试是否使用调试配置构建(我认为这是正确的方法?或者只针对特定的构建配置编写测试是否合理?)。因此,测试输入例如为999:

  1. 如果使用调试配置构建,则测试应该会发生崩溃(来自assert())。
  2. 但是如果没有调试配置,测试应该期望返回值为0
  3. 我知道EXPECT_DEBUG_DEATH,如果使用调试配置构建,则只会发生崩溃。但是,只有在没有调试配置的情况下构建时,我才会看到一个测试宏以期望特定的返回值。

1 个答案:

答案 0 :(得分:2)

与上面提到的其他人一样,如何使用NDEBUG预处理器指令? NDEBUG禁用标准C断言。

你可以这样做

#ifdef NDEBUG
TEST_F(FooTest, DISABLED_MyFuncAbortsOnInputBigger10)
#else
TEST_F(FooTest, MyFuncAbortsOnInputBigger10)
#endif
{
    // ...
    EXPECT_DEATH( /* .. */ );
}

#ifdef NDEBUG
TEST_F(FooTest, MyFuncLogsInvalidInput)
#else
TEST_F(FooTest, DISABLED_MyFuncLogsInvalidInput)
#endif
{
    // ...
}

这样,在发布模式下编译和运行测试套件时,将禁用您的死亡测试。在调试模式下,死亡测试处于活动状态。

测试名称中的DISABLED_前缀允许您禁用测试但继续编译测试代码。您可以在AdvancedGuide

中阅读相关内容