我正尝试测试EXPECT_THROW,如下所示。
#include <gtest/gtest.h>
int Foo(int a, int b){
if (a == 0 || b == 0){
throw "don't do that";
}
int c = a % b;
if (c == 0)
return b;
return Foo(b, c);
}
TEST(FooTest, Throw2){
EXPECT_THROW(Foo(0,0), char*);
}
int main(int argc, char* argv[]){
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
我希望“ Throw2”能够成功。但是它提供了以下错误信息:
Expected: Foo(0,0) throws an exception of type char*.
Actual: it throws a different type.
那么这里抛出什么类型?
答案 0 :(得分:2)
"don't do that"
是一个字符串文字,其类型为const char[14]
。因此,它只能衰减到const char*
,而不是您期望的char*
。
因此,将测试修改为EXPECT_THROW(Foo(0,0), const char*);
应该可以通过。
顺便说一句,在这种情况下,我不会抛出异常。最好只返回std::optional
(如果C ++ 17不可用,则返回boost::optional
),这是更好的IMO。我认为输入不好的东西不足以保证例外。
如果我必须抛出一个异常,那么抛出一个标准的异常类型比加载字符串要好。在这种情况下,std::domain_error
似乎合适。