Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VS2012-禁用并行测试运行_C++_Unit Testing_Visual Studio 2012_Parallel Processing - Fatal编程技术网

C++ VS2012-禁用并行测试运行

C++ VS2012-禁用并行测试运行,c++,unit-testing,visual-studio-2012,parallel-processing,C++,Unit Testing,Visual Studio 2012,Parallel Processing,我在VisualStudio2012测试框架中运行了一些单元测试(c++) 据我所知,这些测试是并行运行的。在这种情况下,测试是相互影响的-我不想并行运行它们 例如,我有两个测试,其中我添加了断点,它们按以下顺序命中: Test1测试类初始化 Test2测试类初始化 Test2测试方法 Test1测试方法 如果先运行Test1的init,那么在启动任何与Test2相关的测试之前,它的所有测试方法都应该运行到完成 在做了一些网络搜索之后,我感到非常困惑。我读到的每一件事都说明了这一点,而你必须跳转

我在VisualStudio2012测试框架中运行了一些单元测试(c++)

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

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

  • Test1测试类初始化
  • Test2测试类初始化
  • Test2测试方法
  • Test1测试方法
  • 如果先运行Test1的init,那么在启动任何与Test2相关的测试之前,它的所有测试方法都应该运行到完成

    在做了一些网络搜索之后,我感到非常困惑。我读到的每一件事都说明了这一点,而你必须跳转才能做到这一点。我们当然没有在我们的项目中启用它

    对可能发生的事情有什么想法吗?我是不是错过了一些基本的东西

    我是不是错过了一些基本的东西

    是。 您永远不应该假设另一个测试用例将按预期工作。这意味着,如果测试以同步或异步方式执行,则永远不会引起关注

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

    这就是我们发挥作用的地方。模拟对象允许您模拟代码的一部分,并确保对象提供的正是您所期望的,因此您不需要依赖其他(耗时的)服务,如HTTP请求、文件流等。 你可以

    当项目变得复杂时,设置需要相当多的行,代码开始复制。解决方法是
    设置
    拆卸
    方法。命名约定因框架而异,
    Setup
    可能在每个或
    TestInitialize
    之前调用
    TearDown
    也可能在每个
    TestCleanup
    之后显示为
    。NUnit、MSTest和xUnit.net的名称可以在上找到


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

    • 它应该读取一个配置文件
    • 它应该验证配置文件是否有效
    • 它应该更新用户的配置
    我将如何构建和测试这一点:

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

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

    • 创建您期望从read方法得到的模拟配置,并测试该方法是否接受它
      • 此时,您应该创建多个模拟配置,测试所有可能的场景,看看它是否适用于所有可能的场景,并相应地进行修复。这也叫,
    • 创建已接受配置的模拟对象,并使用setter更新用户的配置,然后使用检查其设置是否正确
    这是教育的基本原则


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

    虽然我认为你在这篇文章中有很多重要的话要说,但我不同意这种说法“如果测试以同步或异步方式执行,这永远不应该是一个问题”。如果我无法控制哪些测试以异步方式运行,如何保证预期状态?我添加了一个示例,它可能会帮助您理解依赖性注入(模拟对象)的概念。我钦佩你的坚韧不拔,尽管我仍在努力理解这一切与异步运行的测试之间的关系。因此,我将再次询问,如果我无法控制哪些测试正在异步运行,我如何保证预期的状态?@dtmland我想maremp的观点是,单元测试之间不应该存在任何共享状态。如果不是这样的话这里没有共享状态,那么无论测试是同步运行还是异步运行,测试中任何一点的预期状态都是确定的。感谢您的解释@Lilshieste,这正是我想要解释的。