Google 测试 - 使用“SetUpTestSuite”似乎不起作用
Posted
技术标签:
【中文标题】Google 测试 - 使用“SetUpTestSuite”似乎不起作用【英文标题】:Google Test - Using "SetUpTestSuite" doesn't seem to work 【发布时间】:2019-06-25 09:34:43 【问题描述】:我正在尝试编写一个执行测试套件级别“设置”操作的测试套件。
我首先尝试编写一个简单的程序来尝试让它工作,但我没有任何运气来调用“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 存储库中唯一可用的软件包。
【问题讨论】:
【参考方案1】:文档似乎有误。这些方法应称为SetUpTestCase()
和TearDownTestCase()
。至少在 Google Test 1.8.0 中。
【讨论】:
根据文档的名称 were recently changed 到SetUpTestSuite()
和 TearDownTestSuite()
。
你是怎么在那个里游泳的?【参考方案2】:
更改似乎尚未发布。这些文档似乎是 Master 分支的最新版本,而不是发布版本。
【讨论】:
【参考方案3】:如果您的被测代码抛出异常,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),然后异常开始发生。
【讨论】:
以上是关于Google 测试 - 使用“SetUpTestSuite”似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章