首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >googletest SetUpTestSuite()不运行

googletest SetUpTestSuite()不运行
EN

Stack Overflow用户
提问于 2022-06-15 21:08:41
回答 1查看 159关注 0票数 0

出发地:https://google.github.io/googletest/advanced.html#sharing-resources-between-tests-in-the-same-test-suite。我正在使用1.11 googletest版本。

我试图在以下测试中利用这个特性: Game_test.h

代码语言:javascript
运行
复制
    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 (),但它没有。我错过了什么?

代码语言:javascript
运行
复制
TEST_F(Game_test, apply_rule)
{   
    field.setStatus(1, 2, true); // use of undeclared identifier.....

}

P.S.最初我使用SetUpTestSuite(),后来我尝试了SetUpTestCase(),这是在这个例子中

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-15 23:51:50

有几件事:

如果在每个测试套件中运行一次,而不是在每个测试用例中运行一次,那么SetUpTestCase.

  • SetUpTestSuite应该是静态member.

  • field的静态成员。如果您想要在每个测试用例中运行一次,那么使用SetUp,它是一个非静态成员,function.

  • SetUp就可以操作非静态成员变量。

参见此示例,该示例显示了这两个函数的使用情况:

代码语言:javascript
运行
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72637849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档