在Visual Studio中进行适当的单元测试

时间:2016-10-27 21:22:10

标签: c++ unit-testing visual-studio-2013

我有包含多个C ++ / x64项目的解决方案。对于这个项目之一,我想编写单元测试。我正在关注this教程,并且我正在使用Visual Studio社区2013.来自提到的教程的Hello world示例运行正常,但如果我在包含多个项目的更大解决方案中创建测试项目,那么我得到一堆错误。在我进行更深入的故障排除之前,我想澄清一些我没有找到答案的问题:

  1. 如果我有多个测试项目,Test -> Run -> All Tests如何知道要运行哪一个?

  2. 我应该通过以下方式排除我不想测试的项目:Right click on solution name -> Properties -> Configuration

  3. 如果我有要在x64下构建的项目,我应该设置Test -> Test Settings -> Default Processor Architecture -> x64吗?

  4. 如果我的StartUp项目(Right click on project name -> Set as StartUp Project)是测试项目或测试项目,这很重要吗?

  5. 我注意到我的测试项目有win32平台,而测试项目在Right click on solution name -> Properties -> Configuration下有x64这样可以吗?

  6. PS: 我通过Test -> Run -> All Tests

    运行测试

1 个答案:

答案 0 :(得分:1)

  1. 它运行它可以找到的所有测试。它通过测试运行器插件找到测试,每当项目完成构建以查看它是否包含任何测试时都会调用它们。
  2. 为什么您有不想在解决方案中测试的项目?我不认为除了卸载项目之外,还有一种简单的方法可以排除测试项目。
  3. 没有必要,但如果你遇到问题,那就值得一试。
  4. 不,测试跑步者会忽略起始项目。
  5. 根据您的项目设置方式,这可能略有错误或完全错误。
  6. 让我详细说明最后一点。在C ++中设置单元测试有两种典型方法。

    一个是让您的可执行项目包含其所有文件,然后您拥有测试项目,该项目还包含主项目的所有源文件,但包含入口点的文件除外,还包含测试文件。 / p>

    这有必要管理这些文件的缺点,即当您向项目添加新文件时,必须将其添加到两个项目中。这也意味着编译器将编译所有这些源文件两次,每个项目一次。

    这也意味着如果两个项目具有不同的配置(x64 vs Win32),它就可以工作。这并不是一个好处,因为您通常希望测试您实际提供的相同内容,并且测试32位版本的代码对于查找仅在64位版本中发生的错误没有用。 / p>

    另一个选项是有三个项目:一个包含大部分源代码的库(我更喜欢静态库,虽然DLL是一个选项),一个只包含入口点的主项目,以及一个仅包含它的测试项目测试文件。后两者与第一个相关联。

    这意味着所有代码只编译一次,并且您测试的是您正在传递的完全相同的内容。

    在这种情况下,所有项目配置都有匹配。如果他们不这样做,你会得到构建错误,最多可能会出现令人困惑的错误消息("我刚刚编写了这个函数,你的意思是什么,你可以链接它?"),以及链接库的陈旧版本("我把调试printf放在该函数中,为什么不打印?")最坏的情况。

相关问题