Visual Studio C++:使用Google Test创建单元测试可执行项目?

7
使用Visual Studio 2010 C++。我正在尝试使用单元测试,并决定尝试Google Test(gtest)。我有一个现有的项目,它编译为MFC可执行文件(我也想知道如何测试编译为DLL的项目)。我的理解是,单元测试的惯例是应该为测试创建一个新的独立项目。因此,我在同一解决方案中为我的单元测试创建了一个新项目。但是如何链接这些项目呢?我能否从我的测试项目中测试我的可执行文件项目的任意函数/方法?
传统的做法是什么?

相关问题基本上是在问同样的事情,当我搜索这个主题时没有找到:https://dev59.com/3HE85IYBdhLWcg3wpFEa - User
3个回答

10

我认为组织单元测试的最佳方式是:

  • 不要更改主项目。结构应与您的测试操作独立。在我看来,将项目更改为一个大静态库和一个可执行文件并不优雅。 相反,在构建后添加一个后置操作,将所有 obj 文件汇总成一个仅由您的测试项目使用的静态库文件。

  • 创建一个简单的测试项目,链接到您的测试框架和之前生成的静态库。

  • 享受。

主要优点是您不需要改动要测试的项目,并且不需要将所有源代码都包含在测试项目中。

如何在Visual Studio中实现此操作,请参见此帖:Linking to multiple .obj for unit testing a console application


6

你可以把你想要测试的功能放入一个静态库中,该库会被链接到你的测试项目和MFC项目中;或者将你的文件放入两个项目中。第一种方法更加复杂,但第二种方法会导致所有代码都被编译两次...


第一种选择是我们已经做过的,而且效果很好。我认为第二种选择除了小型或者很少改变的项目之外,很快就会变得令人恼火 :) - Jan
你说的将文件放在两个项目中是什么意思?是指在两个项目中都复制一份文件,还是指将磁盘上的同一文件添加到两个项目中? - User
@用户 我会期望符号链接或硬链接。 - alternative
@用户:您只需将相同的文件添加到两个项目中即可,无需拥有多个文件。您可以使用“添加现有项”功能来完成此操作 - 它将文件添加到项目中,但不会复制文件本身。 - Billy ONeal
考虑再多一些,看起来我应该将我的类提取到一个静态库中。这样做会有任何性能影响吗? - User
1
@用户:不是的。静态库只是一组.obj文件的集合。 - Billy ONeal

3
我已经准备了一个GitHub仓库,其中包含Visual Studio 2015的解决方案,可以与Billy的回答并行使用。您可以直接使用它,无需任何其他要求或依赖关系。 https://github.com/fuatcoskun/GoogleTestVS2015 希望这能有所帮助...

当我构建这个时,我看不到输出。有什么想法吗?我需要在某个地方添加getchar()来暂停输出吗? - JC203

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接