ASSERT_THROW认为我的异常属于不同的类型

时间:2014-09-08 16:48:22

标签: c++ googletest

在Google Test中,当我运行以下测试时:

void ThrowInvalidArgument()
{
   throw new std::invalid_argument("I am thrown an invalid_argument");
}

TEST(ExpectExceptions, Negative)
{
  ASSERT_THROW(ThrowInvalidArgument(), std::invalid_argument);
}

我遇到以下失败:

error: Expected: ThrowInvalidArgument() throws an exception
                 of type std::invalid_argument.
       Actual: it throws a different type.
[  FAILED  ] ExpectExceptions.Negative (1 ms)

我做错了什么?

2 个答案:

答案 0 :(得分:8)

您正在抛出std::invalid_argument*类型的实例,即指针

改为抛出一个对象:

void ThrowInvalidArgument()
{
     throw std::invalid_argument("I am thrown an invalid_argument");
     //   ^ (no new)
}

答案 1 :(得分:3)

扩展Pjotr​​的有效答案:异常总是应该从普通的临时实例抛出并作为const引用捕获:

void ThrowInvalidArgument() {
    throw std::invalid_argument("I am thrown an invalid_argument");
}

void Elsewhere {
    try {
    }
    catch(const std::invalid_argument& invalidArgEx) {
    }
}