c++ - 如何仅在调试中运行 google 死亡测试?

标签 c++ googletest

我们有一系列死亡测试来检查特定调试 asserts 是否触发。例如,我们构建这样的东西:

LockManager::LockManager(size_t numManagedLocks) :
    _numManagedLocks(numManagedLocks)
{
    assert(_numManagedLocks <= MAX_MANAGABLE_LOCKS &&
        "Attempting to manage more than the max possible locks.");

我们对其失败进行了测试:

EXPECT_DEATH(LockManager sutLockManager(constants::MAX_NUMBER_LOCKS + 1), 
    "Attempting to manage more than the max possible locks.");

由于 assert 仅在调试中编译,因此当组件在发布中构建时,这些测试将失败。避免这种情况的最佳方法是将 EXPECT_DEATH 测试包装在 DEBUG 检测宏中:

#ifndef NDEBUG
     // DEATH TESTS
#endif

或者是否有更好的特定于 Google 测试的方法?

最佳答案

由于 assert() 宏使用预处理器逻辑,因此解决方案也应该在此级别上 - 通过条件编译。 您可以使用 GoogleTest 特定的 DISABLED_ 语法(参见 Temporarily Disabling Tests )并编写类似

#ifdef _DEBUG
#define DEBUG_TEST_ 
#else
#define DEBUG_TEST_ DISABLED_
#endif 

你原来的建议看起来也不错,但是我最好直接写条件:

#ifdef _DEBUG 
 ...

关于c++ - 如何仅在调试中运行 google 死亡测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51134934/

相关文章:

c++ - CMake:如何指定 ctest 应在其中查找可执行文件的目录?

c++ - GMock StrictMock无趣的函数调用不会通过测试

c++ - 谷歌模拟单例 C++ 类

c++ - 括号中的变量 C++

C++ 访问不属于对象本身的内存

c++ - 用C++计算圆周率;我哪里搞砸了?

c++ - opencv vs 2010 依赖问题

c++ - 如何使 [std::operator""s] 在命名空间中可见?

c++ - 使用 CMake 生成的系统在构建时运行 Google 测试

c++ - 如何使用 GTest 测试具有多个模板参数的 C++ 模板类?