如何为“使用全局变量”;“配置”;在Googletest框架中的多个测试中 < >我使用C++的谷歌测试框架。每个文件都包含一个config.hpp,它定义了一个全局配置变量。我想在变量中定义配置,而不是编译时常量或constexpr。如何定义依赖项,使其在链接在一起的不同文件中具有相同的变量?我必须用单人床吗?我可以避免吗?有没有更好的推荐方法来使用多个xUnit样式的测试文件

如何为“使用全局变量”;“配置”;在Googletest框架中的多个测试中 < >我使用C++的谷歌测试框架。每个文件都包含一个config.hpp,它定义了一个全局配置变量。我想在变量中定义配置,而不是编译时常量或constexpr。如何定义依赖项,使其在链接在一起的不同文件中具有相同的变量?我必须用单人床吗?我可以避免吗?有没有更好的推荐方法来使用多个xUnit样式的测试文件,c++,googletest,emscripten,C++,Googletest,Emscripten,我的配置文件:config.hpp: #pragma once struct { const float tolerance = 0.001; // ... } CONFIG_VAR; 每个test*.cpp源文件如下所示: #include "gtest/gtest.h" #include "core/config.hpp" TEST(a, b) { ... } 我的主文件: #include "gtest/gtest.h" int main(int argc, char

我的配置文件:
config.hpp

#pragma once
struct {
    const float tolerance = 0.001;
    // ...
} CONFIG_VAR;
每个test*.cpp源文件如下所示:

#include "gtest/gtest.h"
#include "core/config.hpp"
TEST(a, b) { ... }
我的主文件:

#include "gtest/gtest.h"
int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
我使用以下方法编译和链接:

em++  -I $GTEST_ROOT/googletest/include main_all_tests.cpp test_*.cpp
我的问题是变量CONFIG_VAR的多个定义

我的解决方案基于。

您需要的一切都在GitHub上的Google测试官方存储库中

无论如何,要在同一文件测试中共享某些内容,请执行以下操作:

class YourTestCase : public ::testing::Test
{
protected:

    virtual void SetUp()
    {
        globalObject = new YourObject();
    }

    virtual void TearDown() {
        delete globalObject;
        globalObject = nullptr;
    }

    Object * globalObject = nullptr;

};
因此,在您的测试用例中:

TEST_F(YourTestCase, TestOne) {

    ASSERT_EQ("your value here", globalObject->getValue());

}

TEST_F(YourTestCase, TestTwo) {

    ASSERT_EQ("your value here", globalObject->getValue());

}

TEST_F(YourTestCase, TestThree) {

    ASSERT_EQ("your value here", globalObject->getValue());

}
注意。注意函数的名称。它是测试F而不是测试

另一方面,如果您想在测试程序级别执行此操作―在文件之间共享某些内容,则需要设置一个环境对象。大概是这样的:

Environment * AddGlobalTestEnvironment(Environment * env);

我以前从未使用过,所以我不能告诉你太多关于它的信息,但在我上面分享的链接中有更多的信息。通常,全局变量会使代码更难阅读,并可能导致问题。你最好避开他们

我无法在您的代码示例中发现全局变量?它是在
core/CONFIG.hpp
中定义的
CONFIG\u VAR
,您真正的问题是什么?这是配置变量的多重定义吗?那么它与这个问题是重复的: