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

时间:2018-05-22 12:27:03

标签: c++ visual-c++ visual-studio-2017 googletest boost-test

我目前正在为我们的开发团队评估单元测试框架并遇到一个我无法弄清楚如何解决的问题。

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

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

但是当我尝试从exe项目中测试代码时,我得到了exeK项目中定义的代码的LNK2019“未解析的外部符号”链接器错误。包含目录设置正确,测试项目引用相关的其他项目。我很茫然。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

然后你可以像任何其他"图书馆一样测试你的项目"项目,没有相关的代码可以在您的可执行项目中进行测试。