Link 向遗留解决方案添加单元测试时出错

Link error when adding unit tests to legacy solution

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

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

就是那个exe工程我好像没法测试。 Boost::Test 和 Google.Test 我都试过了。当我尝试使用在其中一个 dll 项目中定义的 class 编写测试时,它按预期工作。

但是当我尝试测试 exe 项目中的代码时,我收到了 exe 项目中定义的代码的 LNK2019 "Unresolved external symbol" 链接器错误。包含目录设置正确,测试项目引用了相关的其他项目。我很茫然。

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

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

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

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

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