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::future
s,它将自动捕获异常并在原始线程的上下文中重新抛出它们(当您调用 future.get()
时)这将被 gtest 捕获。
这发生在我身上,我开始使用不受支持的 TEST_TIMEOUT_BEGIN()
和 TEST_TIMEOUT_FAIL_END()
宏黑客 (http://antonlipov.blogspot.com/2015/08/how-to-timeout-tests-in-gtest.html),然后异常开始发生。
我正在尝试编写一个执行测试套件级别 "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::future
s,它将自动捕获异常并在原始线程的上下文中重新抛出它们(当您调用 future.get()
时)这将被 gtest 捕获。
这发生在我身上,我开始使用不受支持的 TEST_TIMEOUT_BEGIN()
和 TEST_TIMEOUT_FAIL_END()
宏黑客 (http://antonlipov.blogspot.com/2015/08/how-to-timeout-tests-in-gtest.html),然后异常开始发生。