将单元测试添加到旧解决方案时出现链接错误
Link error when adding unit tests to legacy solution
我目前正在为我们的开发团队评估单元测试框架,遇到了一个我不知道如何解决的问题。
我们的应用程序是使用 Visual Studio 2017 构建的。该解决方案包含 17 个项目。它们中的大多数由另一个团队开发(从我们的角度来看基本上是第三方库(,大多数项目都会生成dll文件。一个项目配置为生成可执行文件。
这是我似乎无法测试的 exe 项目。我已经尝试了Boost::Test和Google.Test。当我尝试使用其中一个 dll 项目中定义的类编写测试时,它按预期工作。
但是当我尝试测试 exe 项目中的代码时,LNK2019 exe 项目中定义的代码出现"未解析的外部符号"链接器错误。包含目录设置正确,测试项目引用相关的其他项目。我不知所措。
经过一些在线搜索和对新设置的测试解决方案的修补,我确定了两个可能的原因:
- 无法在生成 exe 文件的项目中测试代码
- 无法在使用__stdcall编译的项目中测试代码
我的链接器错误可能是由此引起的吗?如果是这样,我该如何解决错误?
不能(直接(对生成可执行文件的项目进行单元测试。单元测试框架需要创建一个可执行文件来运行(和评估(单元测试,因此您最终会在项目中得到两个 main((...
我只能提出以下建议:将可执行项目转换为库项目(无论是.dll库还是静态库(,并将 main(( 中的(希望(少量代码移动到另一个项目,该项目将(现在的库(项目链接到可执行文件。如果你的 main(( 有很多代码,你可以考虑把它变成一个静态函数,然后从"new"可执行项目中的"new"main(( 调用该静态函数(从而启动你的应用程序(。
然后,您可以像测试任何其他"库"项目一样测试您的项目,并且没有相关代码可以在您的基本可执行项目中进行测试。
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误