GoogleTest:EXPECT_THROW捕获了不同的类型?

时间:2018-10-02 04:50:08

标签: c++ testing googletest throw

我正尝试测试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.

那么这里抛出什么类型?

1 个答案:

答案 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似乎合适。