gpt4 book ai didi

c++ - 如何在 Googletest 框架的多个测试中使用 "configurations"的全局变量

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:48 25 4
gpt4 key购买 nike

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

我的配置文件:config.hpp:

#pragma once
struct {
const float tolerance = 0.001;
// ...
} CONFIG_VAR;

每个测试 *.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 的多重定义。

我的解决方案基于 related question .

最佳答案

你需要的一切都是right here在 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());

}

注意:注意函数的名称。它是TEST_F而不是TEST

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

Environment * AddGlobalTestEnvironment(Environment * env);

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

关于c++ - 如何在 Googletest 框架的多个测试中使用 "configurations"的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39429409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com