将单元测试添加到旧解决方案时出现链接错误

Link error when adding unit tests to legacy solution

本文关键字:链接 错误 解决方案 单元测试 添加      更新时间:2023-10-16

我目前正在为我们的开发团队评估单元测试框架,遇到了一个我不知道如何解决的问题。

我们的应用程序是使用 Visual Studio 2017 构建的。该解决方案包含 17 个项目。它们中的大多数由另一个团队开发(从我们的角度来看基本上是第三方库(,大多数项目都会生成dll文件。一个项目配置为生成可执行文件。

这是我似乎无法测试的 exe 项目。我已经尝试了Boost::Test和Google.Test。当我尝试使用其中一个 dll 项目中定义的类编写测试时,它按预期工作。

但是当我尝试测试 exe 项目中的代码时,LNK2019 exe 项目中定义的代码出现"未解析的外部符号"链接器错误。包含目录设置正确,测试项目引用相关的其他项目。我不知所措。

经过一些在线搜索和对新设置的测试解决方案的修补,我确定了两个可能的原因:

  • 无法在生成 exe 文件的项目中测试代码
  • 无法在使用__stdcall编译的项目中测试代码

我的链接器错误可能是由此引起的吗?如果是这样,我该如何解决错误?

不能(直接(对生成可执行文件的项目进行单元测试。单元测试框架需要创建一个可执行文件来运行(和评估(单元测试,因此您最终会在项目中得到两个 main((...

我只能提出以下建议:将可执行项目转换为库项目(无论是.dll库还是静态库(,并将 main(( 中的(希望(少量代码移动到另一个项目,该项目将(现在的库(项目链接到可执行文件。如果你的 main(( 有很多代码,你可以考虑把它变成一个静态函数,然后从"new"可执行项目中的"new"main(( 调用该静态函数(从而启动你的应用程序(。

然后,您可以像测试任何其他"库"项目一样测试您的项目,并且没有相关代码可以在您的基本可执行项目中进行测试。