我们有一系列的死亡测试来检查特定的调试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的方法?
3条答案
按热度按时间5q4ezhmt1#
因为assert()宏使用预处理器逻辑,所以解决方案也应该在这个级别上--通过条件编译。
你原来的建议看起来也不错,不过我最好直接写条件:
hjzp0vay2#
我们生成了一个工作MACRO,用于替代完全死亡测试或仅替代其他测试中出现的
ASSERT_DEATH
:当然,我们将需要覆盖我们使用的任何其他测试类型(例如
TEST_P
或EXPECT_DEATH
),但这应该不是一个大问题。iyfamqjs3#
我认为GTest现在已经有了一个解决方案:预期_调试_终止