c++ 我如何运行google death测试在调试只?

hyrbngr7  于 2022-11-27  发布在  Go
关注(0)|答案(3)|浏览(137)

我们有一系列的死亡测试来检查特定的调试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测试 Package 在DEBUG检测宏中:

#ifndef NDEBUG
     // DEATH TESTS
#endif

或者有没有一种更好的、针对Google Test的方法?

5q4ezhmt

5q4ezhmt1#

因为assert()宏使用预处理器逻辑,所以解决方案也应该在这个级别上--通过条件编译。

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

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

#ifdef _DEBUG 
 ...
hjzp0vay

hjzp0vay2#

我们生成了一个工作MACRO,用于替代完全死亡测试或仅替代其他测试中出现的ASSERT_DEATH

#if defined _DEBUG

    #define DEBUG_ONLY_TEST_F(test_fixture, test_name) \
        TEST_F(test_fixture, test_name)
    #define DEBUG_ONLY_ASSERT_DEATH(statement, regex) \
        ASSERT_DEATH(statement, regex)

#else

    #define DEBUG_ONLY_TEST_F(test_fixture, test_name) \
        TEST_F(test_fixture, DISABLED_ ## test_name)
    #define DEBUG_ONLY_ASSERT_DEATH(statement, regex) \
        std::cout << "WARNING: " << #statement << " test in " << __FUNCTION__ << " disabled becuase it uses assert and fails in release.\n";

#endif

当然,我们将需要覆盖我们使用的任何其他测试类型(例如TEST_PEXPECT_DEATH),但这应该不是一个大问题。

iyfamqjs

iyfamqjs3#

我认为GTest现在已经有了一个解决方案:预期_调试_终止

相关问题