在Googletest安装程序中捕获异常()

时间:2016-03-01 14:01:13

标签: c++ exception googletest

我有一个包含SetUp()TearDown()的测试类,带有某些输入,并使用各种不同的输入运行。当使用某些输入时,将在SetUp()内而不是在正文中抛出异常。这是预期的,虽然它不是测试的严格部分,但我不希望将SetUp()代码移到测试体中,仅用于此特定实例。但是,我找不到在这里捕获异常的方法。我的代码类似于以下内容:

struct MyInputs {
    int first_;
    const char* second_;
    const char* third_;
};

测试类是非常标准的gtest样板:

class MyTestClass : public ::testing::TestWithParam<MyInputs> {
public:
    virtual void SetUp();
    virtual void TearDown() {};

    // etc...
}

void MyTestClass::SetUp() {
    // Do some stuff here using MyInputs.first_ which may throw
    // a "thrown from here" exception
}

我有一个标准的测试闭包,虽然它真的与这里的问题无关 - 它没有达到这个目的。

TEST_P(MyTestClass,aSpecificTest) {
    // ... some stuff ...
}

然后我用多个输入创建循环:

INSTANTIATE_TEST_CASE_P(MultipleTests,
                        MyTestClass,
                        ::testing::Values( MyInputs( 1234, "ABC", "XXX"),         // <-- No exception thrown
                                           MyInputs( 5678, "DEF", "ZZZ") ) );  // <-- Exception thrown

当我运行代码时,我收到错误:

C++ exception with description "thrown from here" thrown in SetUp().

当它遇到'坏'输入时。有没有办法可以捕获这个并忽略或设置EXPECT_类型子句?我意识到我可以简单地在try中添加catch / SetUp(),但我希望我可以在某个地方使用EXPECT_THROW进行测试。

0 个答案:

没有答案