引用主项目文件时C++原生单元测试项目出现编译错误
搞定VS2015 C++原生单元测试的编译错误
我当初在VS2015里折腾原生C++单元测试的时候,也踩过一模一样的坑——刚把主项目引用到测试项目里,一include头文件就满屏红,那种挫败感太真实了。结合我当时踩的坑,给你几个靠谱的排查方向:
1. 先把编译配置完全对齐
单元测试项目和主项目的编译配置必须完全一致,差一点都不行:
- 右键解决方案→属性→配置属性,确保两个项目的「配置」(Debug/Release)和「平台」(x86/x64)是同步的,别一个Debug x86一个Release x64,这种不匹配会导致大量链接或符号错误。
2. 别错把.cpp文件当头文件include
你提到“包含主项目文件”,如果不小心include了主项目的.cpp实现文件,而不是.h头文件,肯定会因为函数重复定义炸锅。一定要确认你include的是主项目的公共头文件,比如:
// 正确姿势 #include "MyMainProjectCore.h" // 错误姿势(别这么干) #include "MyMainProjectCore.cpp"
3. 预编译头要统一设置
VS2015的预编译头很容易搞出问题,主项目和测试项目的预编译头配置必须对齐:
- 右键测试项目→属性→C/C++→预编译头,确保「预编译头」选项是「使用(/Yu)」,并且指定
stdafx.h为预编译头文件; - 同时把测试项目里的
stdafx.cpp设置为「创建预编译头(/Yc)」,不然预编译头不生效还是会报错。
4. 把主项目改成库文件输出
如果你的主项目是控制台/Windows应用程序(.exe),测试项目没法直接引用它的函数。右键主项目→属性→配置属性→常规,把「输出类型」改成静态库(.lib),这样测试项目就能正确链接到主项目的代码了。
给你一个正确的测试类示例
#include "stdafx.h" #include "CppUnitTest.h" // 引入主项目的公共头文件 #include "Calculator.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace MathTests { TEST_CLASS(BasicArithmeticTests) { public: TEST_METHOD(AddTwoNumbers) { // 调用主项目的函数测试 int sum = Calculator::Add(10, 20); Assert::AreEqual(30, sum); } }; }
如果试完这些还是有错误,把具体的编译错误信息(比如是“未定义标识符”还是“重复定义”)贴出来,能更快定位问题。不过按我的经验,上面几个步骤应该能解决大部分常见的编译问题了。
内容的提问来源于stack exchange,提问作者Calum McManus
相关产品推荐
相关产品推荐

