【问题标题】:VS2012 - Disable parallel test runsVS2012 - 禁用并行测试运行
【发布时间】:2014-07-22 03:32:19
【问题描述】:

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

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

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

  1. Test1 TEST_CLASS_INITIALIZE
  2. Test2 TEST_CLASS_INITIALIZE
  3. Test2 TEST_METHOD
  4. Test1 TEST_METHOD

如果 Test1 的 init 先运行,那么在启动与 Test2 相关的任何东西之前,它的所有测试方法都应该运行完成!

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

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

【问题讨论】:

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


    【解决方案1】:

    我在这里遗漏了一些基本的东西吗?

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

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

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

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


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

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

    我将如何构建和测试这个:

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

    • 测试读取方法是否返回所需的结果(对象、字符串或您设计的)

    • 创建您期望从读取方法获得的模拟配置并测试方法是否接受它
      • 此时,您应该创建多个模拟配置,测试所有可能的场景以查看它是否适用于所有可能的场景并相应地修复它。这也称为code coverage
    • 创建接受配置的模拟对象并使用设置器更新用户的配置,然后用于检查是否设置正确

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

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

    【讨论】:

    • 虽然我认为您在这篇文章中有很多好话要说 - 我不同意“测试是同步执行还是异步执行”的说法。如果我无法控制异步运行的测试,如何保证预期状态?
    • 我添加了一个例子,它可以帮助你理解依赖注入(模拟对象)的概念。
    • 我很佩服你的坚韧,尽管我仍在努力理解这一切与异步运行的测试有何关系。所以,我又要问了,如果我不能控制哪些测试是异步运行的,我怎么能保证一个预期的状态呢?
    • @dtmland 我认为 maremp 的观点是单元测试之间不应该有任何共享状态。如果没有共享状态,那么无论测试是同步运行还是异步运行,测试中任何点的预期状态都是确定性的。
    • 感谢@Lilshieste 的解释,这正是我想要解释的。
    猜你喜欢
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多