來自: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 :我希望它會為每個 TEST_F 自動運行 SetUpTestCase(),但事實并非如此。我錯過了什么?
TEST_F(Game_test, apply_rule)
{
field.setStatus(1, 2, true); // use of undeclared identifier.....
}
PS 最初我使用 SetUpTestSuite(),后來我嘗試了 SetUpTestCase(),在示例中
uj5u.com熱心網友回復:
幾件事:
- 例子是
SetUpTestSuite,不是SetUpTestCase。 SetUpTestSuite應該是靜態成員。field如果在 中使用,應該是類的靜態成員SetUpTestSuite。SetUpTestSuite每個測驗套件運行一次,而不是每個測驗用例一次。- 如果您希望每個測驗用例運行一次,請使用
SetUp非靜態成員函式。 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 ://godbolt.org/z/e6Tz1xMr1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/493237.html
上一篇:Rails中的存根控制器方法
