我安装了最新的 NUnit(3.2.0),并且我的所有测试都并行运行。它可能看起来像可取的行为,但我没有要求它,实际上它破坏了我的一些测试。我有一些与[OneTimeSetUp]
线程相关的初始化,似乎我无法强制 NUnit 按顺序运行我的测试。我已经阅读了文档,它指出默认情况下测试不是并行运行的,但实际上它们是并行运行的!
此外,我尝试添加以下属性:[assembly: Parallelizable(ParallelScope.None)]
- 不走运。
有谁知道如何改变这种行为?
PS 我使用 ReSharper 运行它,但也尝试使用 MSVS 插件。
UPD:我正在使用 MVVM Light DispatcherHelper.Initialize()
(inside [OneTimeSetUp]
) 来存储调度程序对象,该对象后来被几个测试使用。如果线程不同(在测试和设置方法之间),那么被测试的操作会异步执行,我的测试会失败。
我在不同的测试中检查了线程 ID,它们都是不同的。
UPD2:文档摘录:
NUnit 3.0 框架可以在程序集中并行运行测试。这是与引擎并行测试执行完全分开的工具,尽管可以在同一测试运行中使用两者。
默认情况下,不会发生并行执行。属性用于指示哪些测试可以并行运行以及它们与其他测试的关系。
如果这并不意味着程序集中的测试在明确指定之前不应该并行运行,那么这意味着什么?为什么[assembly: Parallelizable(ParallelScope.None)]
对测试并行执行没有影响?
UPD3:
可能会在下面找到问题的答案,但如果您(就像我一样)被困住了,DispatcherHelper.Initialize()
您只需从 中删除此初始化OneTimeSetUp
并将以下几行放入使用调度程序的每个测试中:
DispatcherHelper.Reset();
DispatcherHelper.Initialize();