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

How to test for assert in debug build, but returned value in release?

我想测试一个功能:

#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. 但如果没有调试配置,测试应该期望 return 值为 0

我知道 EXPECT_DEBUG_DEATH,只有在使用调试配置构建时才会出现崩溃。但是我没有看到只有在 没有 调试配置的情况下构建时才期望特定 return 值的测试宏。

像上面提到的其他人一样,只使用 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.

中阅读相关信息