如何在Googletest框架中的多个测试中使用全局变量进行"configurations"
How to use a global variable for "configurations" in multiple tests in Googletest framework
我使用谷歌测试框架的c++。每个文件都包含一个config.hpp,它定义了一个全局配置变量。我想在一个变量中定义我的配置,而不是编译时const或constexpr
。如何定义依赖关系,以便在链接在一起的不同文件中具有相同的变量?我必须使用单例吗?我能避免吗?是否有更好的推荐方法来使用xUnit风格的多个测试文件?
我的配置文件: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
p。我的问题是变量CONFIG_VAR的多个定义。
我的解决方案是基于一个相关的问题
你所需要的一切都在这里在GitHub上的Google Test的官方存储库。
无论如何,要在同一个文件中共享一些东西,你可以这样做:
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());
}
。:注意函数名。这是 TEST_F 不是测试。
另一方面,如果您想在测试程序级别进行操作——在文件之间共享某些内容,则需要设置一个环境对象。像这样:
Environment * AddGlobalTestEnvironment(Environment * env);
我以前从未使用过,所以我不能告诉你这么多,但是在我上面分享的链接中有更多的信息。通常,全局变量使代码更难阅读,并可能导致问题。你最好避开它们。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- 在 elf 文件中查找全局变量的位置
- 包括一个类来定义全局变量参数 c++ :(