具有gtest程序的以下情况的设计

时间:2017-03-28 17:57:15

标签: c++ design-patterns googletest

在我目前的实施中,我有2个文件(我被困住了,没有得到任何进一步的文件)

//firstFile.cpp
class first
{
    //some object of xyz class
};

first f;  //global

TEST(Suite, Testcase
{
//do something
}



//secondFile.cpp
class second
{
public:
//some data members

void function()
}

任务: - 我想调用TEST(认为它是一个特殊的函数,当它被调用时,第一个对象(即将创建全局对象)。在测试中我想保存一些数据用于后期处理,这显然我不能在头等舱做,因为它会在每次TEST调用时初始化。

问题: - 我有一个单独的类(在另一个.cpp文件中),它需要保存所需的数据结构。我想要一种在TEST过程中访问这些数据结构的方法,并在每次TEST调用时继续在先前数据上添加数据。我在firstFile.cpp中没有第二类的对象,因为它也会在每次调用时被创建/销毁。

有什么建议吗?此外,我无法对TEST procdedure做任何事情,这就是它的方式。

1 个答案:

答案 0 :(得分:1)

在gtest中你可以定义测试夹具。这有点像为一组测试定义上下文。它为您提供了在每次测试之前/之后,也可以在测试套件运行之前/之后的SetUp / TearDown内容的方法。请注意,SetUpTearDown区分大小写。

struct MyFixture : testing::Test
{
private:
    // stuff
protected:
    //! Called before running all tests
    static void SetUpTestCase();
    //! Called after running all tests
    static void TearDownTestCase();

    //! Called before each test
    void SetUp() {}
    //! Called after each test
    void TearDown() {}

public:
    static SomeSharedObject& GetSharedObjInTest() {}
};

在测试用例中你需要调用

TEST_F(MyFixture, MyTest_Name)
{
// some cool stuff here
}

您可以在该fixture中创建一个first的静态实例,在SetUp()中初始化它,并使用静态getter从不同的测试中访问它。

请参阅文档gtest - Sharing resources between tests in the same test case