如何用GoogleTest测试C++控制台程序?解决头文件引用问题
问题描述
我的控制台应用包含两个文件:
Program.h
int Add(int x, int b);
Program.cpp
#include <iostream> int Add(int x, int b) { return x * b; } int main() { int x = 4; int y = 5; std::cout << x << " add " << y << " is " << Add(x, y) << std::endl; }
该程序运行正常,但我想用GoogleTest测试Add()函数。我用Visual Studio自带的GoogleTest项目模板创建了测试项目,却无法在其中#include "Program.h"。
请问用GoogleTest测试控制台程序最简单的方法是什么?我曾考虑为控制台应用文件夹中的文件创建NTFS硬/软链接,但这种方法可能在Git中或移动解决方案时失效。
解决方案
不需要用硬/软链接,直接通过Visual Studio的项目配置就能解决,以下是两种简单可行的方法:
方法一:添加文件引用(推荐)
- 在测试项目上右键 → 选择「添加」→「现有项」
- 找到控制台项目目录下的
Program.h和Program.cpp,点击「添加」按钮旁的下拉箭头,选择「添加为链接」 - 这样测试项目会引用原文件,不会生成副本,Git同步或移动解决方案时只要目录结构不变就没问题
方法二:配置包含目录
- 右键测试项目 →「属性」→「C/C++」→「常规」→「附加包含目录」
- 点击编辑按钮,添加控制台项目所在的文件夹路径(建议用相对路径,比如
../你的控制台项目名称,避免绝对路径的问题) - 配置完成后,就能在测试项目中正常
#include "Program.h"了
编写测试用例
完成上述配置后,在测试项目的.cpp文件中编写GoogleTest用例即可,示例代码如下:
#include <gtest/gtest.h> #include "Program.h" TEST(AddTest, MultipliesNumbers) { EXPECT_EQ(Add(4, 5), 20); EXPECT_EQ(Add(2, 3), 6); EXPECT_EQ(Add(0, 10), 0); }
额外建议(规范做法)
如果后续还有更多函数需要测试,建议把Add()这类业务逻辑函数抽成一个独立的静态库项目,让控制台项目和测试项目都依赖这个静态库。这样既避免了测试项目引用主项目文件的问题,也能更好地分离业务代码和入口代码。
内容的提问来源于stack exchange,提问作者Jason Cho
相关产品推荐
相关产品推荐

