如何在调试版本中测试断言,但在发布时返回值?
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:
- 如果使用调试配置构建,测试应该会发生崩溃(来自
assert()
)。
- 但如果没有调试配置,测试应该期望 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.
中阅读相关信息
我想测试一个功能:
#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:
- 如果使用调试配置构建,测试应该会发生崩溃(来自
assert()
)。 - 但如果没有调试配置,测试应该期望 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.