VS2012 - 禁用并行测试运行

时间:2014-07-21 17:03:01

标签: c++ unit-testing visual-studio-2012 parallel-processing

我在Visual Studio 2012测试框架中运行了一些单元测试(c ++)。

据我所知,测试是并行运行的。在这种情况下,测试是相互踩踏的 - 我不想并行运行它们!

例如,我有两个测试,其中我添加了断点,它们按以下顺序命中:

  1. Test1 TEST_CLASS_INITIALIZE
  2. Test2 TEST_CLASS_INITIALIZE
  3. Test2 TEST_METHOD
  4. Test1 TEST_METHOD
  5. 如果Test1的init首先运行,那么在启动与Test2相关的任何内容之前,它的所有测试方法都应该运行完毕!

    在做了一些互联网搜索后,我感到非常困惑。我正在阅读的所有内容都是Visual Studio 2012 does not run tests concurrently by default,你必须通过箍来启用它。我们当然没有在我们的项目中启用它。

    关于可能发生的事情的任何想法?我在这里遗漏了一些基本的东西吗?

1 个答案:

答案 0 :(得分:0)

  

我错过了一些基本的东西吗?

您永远不应该假设另一个测试用例将按预期工作。这意味着如果测试同步或异步执行,它应该永远成为一个问题。

当然,有些测试用例需要一些基本的部分代码才能工作,这可能是您自己的代码或您使用的框架/库的一部分。说到这一点,程序员应该知道结果会产生什么样的数据或对象。

这是Mock Objects发挥作用的地方。模拟对象允许您模仿代码的一部分并确保对象提供您期望的内容,因此您不必依赖其他(耗时)服务,例如HTTP请求,文件流等。 你可以read more here

当项目变得复杂时,设置需要相当多的行并且代码开始重复。解决方案是SetupTearDown方法。命名约定不同于框架,Setup可能被称为beforeEachTestInitializeTearDown也可能显示为afterEachTestCleanup。可以在xUnit.net codeplex page上找到NUnit,MSTest和xUnit.net的名称。


一个简单的示例应用程序:

  • 它应该读取配置文件
  • 应验证配置文件是否有效
  • 它应该更新用户的配置

我将如何构建和测试它:

  • 有一个方法来读取配置,第二个方法来验证它
  • 有一个用户设置的getter / setter

  • 测试读取方法,如果它返回所需的结果(对象,字符串或者你设计了它)

  • 创建模拟配置,您希望从read方法和测试方法接受它
    • 此时,您应该创建多个模拟配置,测试所有可能的方案,以查看它是否适用于所有可能的方案并相应地进行修复。这也称为code coverage
  • 创建接受配置的模拟对象并使用setter更新用户的配置,然后用来检查它是否设置正确

这是Test-Driven Development (TDD)的基本原则。

如果测试套件按照描述设置并且所有测试都通过,则连接在一起的所有这些部件应该完美地工作。其他测试,例如End-to-End (E2E)测试不是必需的,我只使用它们来确保整个应用程序流程正常工作并轻松捕获错误(例如http连接错误)。