如何为“使用全局变量”;“配置”;在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
,您真正的问题是什么?这是配置变量的多重定义吗?那么它与这个问题是重复的: