在多个测试中创建并保持状态
Create and keep state across several tests
在 Microsoft 的 cpp 单元测试框架中,可以为多个测试同时初始化(和清理)事物:
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
TEST_CLASS(MyTestClass)
{
public:
TEST_CLASS_INITIALIZE(InitForAllTests)
{
// Do something exactly one time for all tests in this class.
// This is run before the first test starts.
}
TEST_CLASS_CLEANUP(CleanupForAllTests)
{
// This is run after the last test of the class has finished executing.
}
// Contains a lot of tests.
};
Google 测试中是否内置了类似的东西?
测试夹具 class 不适合,因为为每个测试重新创建对象,因此 constructor/destructor 和 SetUp()
/TearDown()
是 运行 对于每个测试(如 MS cpp 单元测试框架的 TEST_METHOD_INITIALIZE
、TEST_METHOD_CLEANUP
)。
您可以使用 test environment 进行全局设置和拆卸。
您正在寻找 SetUpTestSuite()
and TearDownTestSuite()
(之前
SetUpTestCase()
和 TearDownTestCase()
在 googletest < v1.8 中)。为了
示例:
gtester.cpp
#include <gtest/gtest.h>
#include <iostream>
struct test_suite_one : public ::testing::Test {
static void SetUpTestSuite() {
++suite_resource;
std::cout << "suite_resource=" << suite_resource << std::endl;
}
static void TearDownTestSuite() {
suite_resource = 0;
std::cout << "suite_resource=" << suite_resource << std::endl;
}
void SetUp() override {
++test_resource;
std::cout << "test_resource=" << test_resource << std::endl;
}
void TearDown(){}
protected:
unsigned test_resource = 0;
static unsigned suite_resource;
};
unsigned test_suite_one::suite_resource;
TEST_F(test_suite_one,test_one) {
ASSERT_EQ(test_resource,1);
ASSERT_TRUE(suite_resource == test_resource);
++suite_resource;
std::cout << "suite_resource=" << suite_resource << std::endl;
}
TEST_F(test_suite_one,test_two) {
ASSERT_EQ(test_resource,1);
ASSERT_TRUE(suite_resource > test_resource);
std::cout << "suite_resource=" << suite_resource << std::endl;
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
运行方式如下:
$ g++ -Wall -Wextra -o gtester gtester.cpp -lgtest -pthread
$ ./gtester
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from test_suite_one
suite_resource=1
[ RUN ] test_suite_one.test_one
test_resource=1
suite_resource=2
[ OK ] test_suite_one.test_one (0 ms)
[ RUN ] test_suite_one.test_two
test_resource=1
suite_resource=2
[ OK ] test_suite_one.test_two (0 ms)
suite_resource=0
[----------] 2 tests from test_suite_one (1 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[ PASSED ] 2 tests.
在 Microsoft 的 cpp 单元测试框架中,可以为多个测试同时初始化(和清理)事物:
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
TEST_CLASS(MyTestClass)
{
public:
TEST_CLASS_INITIALIZE(InitForAllTests)
{
// Do something exactly one time for all tests in this class.
// This is run before the first test starts.
}
TEST_CLASS_CLEANUP(CleanupForAllTests)
{
// This is run after the last test of the class has finished executing.
}
// Contains a lot of tests.
};
Google 测试中是否内置了类似的东西?
测试夹具 class 不适合,因为为每个测试重新创建对象,因此 constructor/destructor 和 SetUp()
/TearDown()
是 运行 对于每个测试(如 MS cpp 单元测试框架的 TEST_METHOD_INITIALIZE
、TEST_METHOD_CLEANUP
)。
您可以使用 test environment 进行全局设置和拆卸。
您正在寻找 SetUpTestSuite()
and TearDownTestSuite()
(之前
SetUpTestCase()
和 TearDownTestCase()
在 googletest < v1.8 中)。为了
示例:
gtester.cpp
#include <gtest/gtest.h>
#include <iostream>
struct test_suite_one : public ::testing::Test {
static void SetUpTestSuite() {
++suite_resource;
std::cout << "suite_resource=" << suite_resource << std::endl;
}
static void TearDownTestSuite() {
suite_resource = 0;
std::cout << "suite_resource=" << suite_resource << std::endl;
}
void SetUp() override {
++test_resource;
std::cout << "test_resource=" << test_resource << std::endl;
}
void TearDown(){}
protected:
unsigned test_resource = 0;
static unsigned suite_resource;
};
unsigned test_suite_one::suite_resource;
TEST_F(test_suite_one,test_one) {
ASSERT_EQ(test_resource,1);
ASSERT_TRUE(suite_resource == test_resource);
++suite_resource;
std::cout << "suite_resource=" << suite_resource << std::endl;
}
TEST_F(test_suite_one,test_two) {
ASSERT_EQ(test_resource,1);
ASSERT_TRUE(suite_resource > test_resource);
std::cout << "suite_resource=" << suite_resource << std::endl;
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
运行方式如下:
$ g++ -Wall -Wextra -o gtester gtester.cpp -lgtest -pthread
$ ./gtester
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from test_suite_one
suite_resource=1
[ RUN ] test_suite_one.test_one
test_resource=1
suite_resource=2
[ OK ] test_suite_one.test_one (0 ms)
[ RUN ] test_suite_one.test_two
test_resource=1
suite_resource=2
[ OK ] test_suite_one.test_two (0 ms)
suite_resource=0
[----------] 2 tests from test_suite_one (1 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (1 ms total)
[ PASSED ] 2 tests.