You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:15:57