在gtests中测试C ++全局变量的最佳方法

时间:2018-08-28 00:57:07

标签: c++ global-variables googletest

我有一个配置有函数的全局变量。我正在编写一个gtest,通过检查调用该函数后全局变量是否发生变化来测试该函数是否正常工作。

main.cpp 中:

bool flag{false};
void FlipFlag() {
    flag = true;
}

main.h 中:

void FlipFlag();

main_TEST.cpp 中:

#include "gtest/gtest.h"
#include "main.h"

TEST(MainTest, TestFlagFlip) {
    EXPECT_FALSE(flag);
    FlagFlip();
    EXPECT_TRUE(flag);
}

如何访问变量flag进行测试?我不想在flag中声明main.h。这是测试标志的最佳方法吗?

2 个答案:

答案 0 :(得分:1)

将此添加到main.h

extern bool flag;

这告诉链接器flag存在于某处,并将在链接时将其解析。

  

可以从其他翻译单位的范围中引用名称。

*。cpp文件是“翻译单位”。

这里是some documentation about extern

答案 1 :(得分:0)

Unit Testing C With Functions Not in Header中的答案中获取叶子,一种方法是在仅由gtest使用的私有头文件中使用extern。因此,除了上述问题中声明的文件之外,还有一个附加的头文件main_pi.h,它声明了extern bool flag