出发地:https://google.github.io/googletest/advanced.html#sharing-resources-between-tests-in-the-same-test-suite。我正在使用1.11 googletest版本。
我试图在以下测试中利用这个特性: Game_test.h
class Game_test : public :: testing :: Test
{
protected:
Game_test() = default;
virtual ~Game_test() = default;
public:
void SetUpTestCase()
{
Field field(8, 8);
Engine engine;
Rules rules;
GameLogic glogic(&engine, &rules, &field);
}
};cpp :我以为它会为每个SetUpTestCase()自动运行TEST_F (),但它没有。我错过了什么?
TEST_F(Game_test, apply_rule)
{
field.setStatus(1, 2, true); // use of undeclared identifier.....
}P.S.最初我使用SetUpTestSuite(),后来我尝试了SetUpTestCase(),这是在这个例子中
发布于 2022-06-15 23:51:50
有几件事:
如果在每个测试套件中运行一次,而不是在每个测试用例中运行一次,那么SetUpTestCase.
SetUpTestSuite应该是静态member.
field的静态成员。如果您想要在每个测试用例中运行一次,那么使用SetUp,它是一个非静态成员,function.
SetUp就可以操作非静态成员变量。参见此示例,该示例显示了这两个函数的使用情况:
class Game_test : public testing::Test {
protected:
Game_test() = default;
virtual ~Game_test() = default;
public:
static void SetUpTestSuite() {
std::cout << "========Beginning of a test suit ========" << std::endl;
static_field = std::string("AAAA");
}
void SetUp() override {
std::cout << "========Beginning of a test ========" << std::endl;
object_field = std::string("AAAA");
}
static std::string static_field;
std::string object_field;
};
std::string Game_test::static_field;
TEST_F(Game_test, Test1) {
EXPECT_EQ(static_field, std::string("AAAA"));
EXPECT_EQ(object_field, std::string("AAAA"));
// We change object_field, SetUpTestSuite cannot reset it back to "AAAA" because
// it only runs once at the beginning of the test suite.
static_field = std::string("BBBB");
// Although we change object_field here,
// SetUp will reset it back to "AAAA" at the beginning of each test case.
object_field = std::string("BBBB");
}
TEST_F(Game_test, Test2) {
EXPECT_EQ(static_field, std::string("BBBB"));
EXPECT_EQ(object_field, std::string("AAAA"));
}https://stackoverflow.com/questions/72637849
复制相似问题