【问题标题】:Proper unit testing in Visual StudioVisual Studio 中的正确单元测试
【发布时间】:2016-10-27 21:22:10
【问题描述】:

我的解决方案包含多个 C++/x64 项目。对于这个项目之一,我想编写单元测试。我正在关注this 教程,我正在使用 Visual Studio Community 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,这样可以吗?

PS: 我正在通过Test -> Run -> All Tests 运行测试

【问题讨论】:

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


    【解决方案1】:
    1. 它运行它可以找到的所有测试。它通过测试运行器插件查找测试,每当项目完成构建时都会调用这些插件以查看它是否包含任何测试。
    2. 为什么您不想在解决方案中测试项目?我认为除了卸载项目之外,没有简单的方法可以将项目排除在测试之外。
    3. 应该没有必要,但如果遇到问题,值得一试。
    4. 不,测试运行者忽略起始项目。
    5. 根据您的项目设置方式,这可能有点错误或完全错误。

    让我详细说明最后一点。在 C++ 中设置单元测试有两种典型的方法。

    一个是你的可执行项目及其所有文件,然后你有一个测试项目,它还包含主项目的所有源文件,除了包含入口点的文件,还包含测试文件。

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

    这也意味着如果两个项目具有不同的配置(x64 与 Win32),它可以工作。这并不完全是一个好处,因为您通常希望测试您实际交付的相同内容,而测试您的代码的 32 位构建对于发现仅在 64 位构建中发生的错误没有用处。

    另一种选择是拥有三个项目:一个包含大部分源代码的库(我更喜欢静态库,尽管 DLL 是一个选项),一个仅包含入口点的主项目,以及一个仅包含测试文件。后两者与第一个联系在一起。

    这意味着所有代码只编译一次,并且您测试的内容与您交付的内容完全相同。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 2018-04-16
      • 2016-10-30
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多