Gtest:跨多个测试全局访问自动变量

时间:2018-09-19 18:07:43

标签: c++ global-variables googletest auto

我需要设置全局变量type,该变量可以被多个测试使用,理想情况下可以被多个测试文件中的所有测试使用。

由于以下原因,请在下面找到我的脚本:error: non-static data member declared 'auto'

理想情况下,我想知道如何声明此全局变量,以便可以在多个.cpp文件中使用它。任何帮助将不胜感激!

谢谢

customerTest.cpp:

namespace {
    class custTest : public ::testing::Test {
    protected:
        custTest() {
            type = new TYPE();
        }
        virtual ~custTest() {
            delete type;
            type = nullptr;
        }
        auto type; //this is the global variable that I would like to use across multiple tests
    };

    TEST_F(custTest, openPort) {
        type->defineMap();
        ...
    }   

} 

1 个答案:

答案 0 :(得分:1)

我认为问题在于编译器没有任何办法知道您的类成员type中应包含哪种类型的数据。恐怕auto在这里不起作用,因为它用于编译器可以从上下文中推断出对象的实际类型而您没有提供任何对象的情况。 (我们读者可以在类中的其他地方找到type = new TYPE();并从中推断出一些内容,但据我所知auto只能查看初始化其对象的语句。)

那么,如何进行?如果您不知道要使用什么类型的变量,则可能要编写一个模板,或者如果该类型是一小部分可能性,则可以使用{{1 }}。

关于将其用作全局变量:我认为您不需要做任何特殊的事情,除了通常要对全局变量做的事情:在头文件中声明它,在源文件中定义它,并在需要的地方添加标题。通常需要考虑。考虑一下是否真的需要全球化。将其放在适当的名称空间中,以免污染全局名称空间。依此类推。