我有包含多个C ++ / x64项目的解决方案。对于这个项目之一,我想编写单元测试。我正在关注this教程,并且我正在使用Visual Studio社区2013.来自提到的教程的Hello world示例运行正常,但如果我在包含多个项目的更大解决方案中创建测试项目,那么我得到一堆错误。在我进行更深入的故障排除之前,我想澄清一些我没有找到答案的问题:
如果我有多个测试项目,Test -> Run -> All Tests
如何知道要运行哪一个?
我应该通过以下方式排除我不想测试的项目:Right click on solution name -> Properties -> Configuration
如果我有要在x64下构建的项目,我应该设置Test -> Test Settings -> Default Processor Architecture -> x64
吗?
如果我的StartUp项目(Right click on project name -> Set as StartUp Project
)是测试项目或测试项目,这很重要吗?
我注意到我的测试项目有win32平台,而测试项目在Right click on solution name -> Properties -> Configuration
下有x64这样可以吗?
PS:
我通过Test -> Run -> All Tests
答案 0 :(得分:1)
让我详细说明最后一点。在C ++中设置单元测试有两种典型方法。
一个是让您的可执行项目包含其所有文件,然后您拥有测试项目,该项目还包含主项目的所有源文件,但包含入口点的文件除外,还包含测试文件。 / p>
这有必要管理这些文件的缺点,即当您向项目添加新文件时,必须将其添加到两个项目中。这也意味着编译器将编译所有这些源文件两次,每个项目一次。
这也意味着如果两个项目具有不同的配置(x64 vs Win32),它就可以工作。这并不是一个好处,因为您通常希望测试您实际提供的相同内容,并且测试32位版本的代码对于查找仅在64位版本中发生的错误没有用。 / p>
另一个选项是有三个项目:一个包含大部分源代码的库(我更喜欢静态库,虽然DLL是一个选项),一个只包含入口点的主项目,以及一个仅包含它的测试项目测试文件。后两者与第一个相关联。
这意味着所有代码只编译一次,并且您测试的是您正在传递的完全相同的内容。
在这种情况下,所有项目配置都有匹配。如果他们不这样做,你会得到构建错误,最多可能会出现令人困惑的错误消息("我刚刚编写了这个函数,你的意思是什么,你可以链接它?"),以及链接库的陈旧版本("我把调试printf放在该函数中,为什么不打印?")最坏的情况。