在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)
我做错了什么?
答案 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) {
}
}