gpt4 book ai didi

c# - NUnit 3 : Forbid tests to run in parallel

转载 作者:可可西里 更新时间:2023-11-01 08:35:02 27 4
gpt4 key购买 nike

我安装了最新的 NUnit(3.2.0),并且所有测试都并行运行。它可能看起来像是理想的行为,但我并没有要求它,实际上它破坏了我的一些测试。我在 [OneTimeSetUp] 中进行了一些依赖于线程的初始化,似乎我无法做任何事情来强制 NUnit 按顺序运行我的测试。我读过 documentation它指出默认情况下测试不是并行运行的,但实际上它们是!

此外,我尝试添加以下属性:[assembly: Parallelizable(ParallelScope.None)] — 没有成功。

有人知道如何改变这种行为吗?

附言我使用 ReSharper 运行它,但也尝试使用 MSVS 插件。


UPD:我正在使用 MVVM Light DispatcherHelper.Initialize()(在[OneTimeSetUp] 内)来存储调度程序对象,它是后来被几个测试使用。如果线程不同(在测试和设置方法之间),则被测操作将异步执行,我的测试将失败。

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


UPD2:文档摘录:

The NUnit 3.0 framework can run tests in parallel within an assembly. This is a completely separate facility from Engine Parallel Test Execution, although it is possible to use both in the same test run.

By default, no parallel execution takes place. Attributes are used to indicate which tests may run in parallel and how they relate to other tests.

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


UPD3:问题的答案可能在下面找到,但如果您(像我一样)被 DispatcherHelper.Initialize() 困住了,您只需要从 OneTimeSetUp 中删除此初始化并在每个使用调度程序的测试中添加以下行:

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

最佳答案

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

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

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

抱歉,我不熟悉 MVVM Light,所以我无法建议编码回 OneTimeSetup 线程的方法。

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

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

关于c# - NUnit 3 : Forbid tests to run in parallel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com