nUnit 3:禁止测试并行运行 [英] NUnit 3: Forbid tests to run in parallel

查看:92
本文介绍了nUnit 3:禁止测试并行运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我安装了最新的NUnit(3.2.0),并且所有测试都是并行运行的。这可能看起来像是令人满意的行为,但我并没有要求这样做,实际上它通过了我的一些测试。我在[OneTimeSetUp]中有一些依赖于线程的初始化,似乎无法强制NUnit按顺序运行测试。我已经阅读了documentation,它说明默认情况下测试不并行运行,但实际上它们是并行运行的!

此外,我还尝试添加以下属性:[assembly: Parallelizable(ParallelScope.None)]-运气不佳。

有人知道如何更改此行为吗?

附注:我使用ReSharper运行它,但也尝试使用MSVS加载项。


更新:我正在使用MVVM LightDispatcherHelper.Initialize()(在[OneTimeSetUp]内部)存储Dispatcher对象,该对象稍后将被两个测试使用。如果线程不同(在测试方法和设置方法之间),则测试中的操作将异步执行,并且我的测试将失败。

我在不同的测试中检查了线程ID,它们都是不同的。


更新2:文档摘录:

NUnit 3.0框架可以在 程序集。这是一个与发动机完全分开的设施。 并行测试执行,尽管可以在 相同的测试运行。

默认情况下,不进行并行执行。属性用于指示哪些测试可以并行运行,以及它们与 其他测试。

如果这并不意味着在显式指定之前,程序集中的测试不应该并行运行,那么这意味着什么呢?为什么[assembly: Parallelizable(ParallelScope.None)]对测试并行执行没有影响?


更新3: 问题的答案可能在下面找到,但是如果您(就像我一样)使用DispatcherHelper.Initialize(),您只需要从OneTimeSetUp中删除此初始化,并在每个使用调度程序的测试中放入以下行:

DispatcherHelper.Reset();
DispatcherHelper.Initialize();

推荐答案

nUnit不保证所有测试都将在同一线程上运行,因此观察到测试在不同线程上运行并不意味着它们是并行运行的。

文档仅说明测试将按顺序或并行运行。您可能会认为这意味着它们在同一线程上运行,但是内部实现可能需要测试在不同的线程上运行的原因有很多。Timeout就是一个示例,我们会在测试超时时派生一个线程并终止它,但还有很多其他线程。

并行测试运行是NUnit 3的新增功能,因此内部实现已从NUnit 2更改。强制线程内的所有测试在同一线程上运行的属性可能很有用,因此可以随时提交enhancement request

很抱歉,我不熟悉MVVM Light,因此我无法建议如何封送回OneTimeSetup线程。

更新-由于这是Web和异步的常见用法,NUnit团队决定提供一个属性,该属性将要求测试在与fixture的OneTimeSetup相同的线程上运行。这将在下一个版本(3.4)或热修复3.2.1版本中提供。如果要跟踪进度,请参阅issuepull request

更新2-您现在可以将SingleThreadedAttribute添加到TestFixture,以向运行者指示OneTimeSetUpOneTimeTearDown和所有子测试必须在同一线程上运行。

这篇关于nUnit 3:禁止测试并行运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆