Google 测试 - 使用 "SetUpTestSuite" 似乎不起作用

Google Test - Using "SetUpTestSuite" doesn't seem to work

我正在尝试编写一个执行测试套件级别 "Set Up" 操作的测试套件。

我试图先编写一个简单的程序来尝试让它工作,但我没有运气让 "SetUpTestSuite" 方法被调用。

#include <gtest/gtest.h>
#include <iostream>

class MyTest : public ::testing::Test
{
protected:
    static void SetUpTestSuite() {
        std::cerr << "TestSuiteSetup" << std::endl;
    }

    static void TearDownTestSuite() {

    }
};

TEST_F(MyTest, Case1) {
    std::cerr << "TESTING" << std::endl;
}

int main(int argc, char* argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

当我 运行 我得到:

[==========] Running 1 tests from 1 test cases.
[----------] Global test environment set-up.

[----------] 1 test from MyTest
[ RUN      ] MyTest.Case1
TESTING
[       OK ] MyTest.Case1 (0 ms)
[----------] 1 test from MyTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 tests from 1 test cases ran. (0 ms total)
[  PASSED  ] 1 tests.

由于某种原因 SetUpTestSuite() 从未被调用。


我一直在阅读 Google 测试文档的 Sharing Resources Between Tests in the Same Suite 部分,但我无法弄清楚我做错了什么。

有什么我遗漏的吗?


注意:我使用的是 gtest v1.6.0 - 它是我公司 Red Hat RPM 存储库中唯一可用的软件包。

文档似乎有误。这些方法应称为 SetUpTestCase()TearDownTestCase()。至少在 Google 测试 1.8.0.

更改似乎没有发布。这些文档似乎是 Master 分支的最新版本,而不是已发布的版本。

如果您的被测代码抛出异常,gtest 框架将捕获它们并仍然使用 TestDownTestSuite() 关闭。但是如果你在你的测试用例中启动一些线程并且 它们 抛出,那么就没有什么可以捕获它们并且你的进程可能会调用 terminate() 并且该进程将立即停止并在那里不会被拆掉。务必在工作线程中捕获异常,或者使用 std::async 创建 std::futures,它将自动捕获异常并在原始线程的上下文中重新抛出它们(当您调用 future.get() 时)这将被 gtest 捕获。

这发生在我身上,我开始使用不受支持的 TEST_TIMEOUT_BEGIN()TEST_TIMEOUT_FAIL_END() 宏黑客 (http://antonlipov.blogspot.com/2015/08/how-to-timeout-tests-in-gtest.html),然后异常开始发生。