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

问题描述 投票:1回答:1

我想测试一个函数:

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

  1. 如果使用调试配置构建,测试应该会发生崩溃(来自assert())。
  2. 但是没有调试配置,测试应该期望0的返回值。

我知道EXPECT_DEBUG_DEATH,如果使用调试配置构建,它只会发生崩溃。但是,只有在没有调试配置的情况下构建时,我才会看到期望特定返回值的测试宏。

c++ unit-testing debugging googletest
1个回答
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上阅读它。

© www.soinside.com 2019 - 2024. All rights reserved.