我们将解决方案从 SpecFlow1.9 更新到 2.0,将 NUnit2.6.4 更新到 3.2.1。在调整了一些属性和项目设置后,所有测试在 NUnit 中运行良好。但是,当使用 NCrunch 执行 SpecFlow 测试时,我们会收到 SpecFlowException:
TechTalk.SpecFlow.SpecFlowException : The ScenarioContext.Current static accessor cannot
be used in multi-threaded execution. Try injecting the scenario context to the binding
class. See http://go.specflow.org/doc-multithreaded for details.
at TechTalk.SpecFlow.ScenarioContext.get_Current()
我们有意为单线程环境设计了 SpecFlow 测试(以降低工作量),我们只想继续在一个线程中执行这些测试。因此,我们不是将场景上下文作为提议的解决方案注入(我们使用 NInject 而不是 SpecFlow mini-IoC),而是寻找一些设置来让 SpecFlow 相信它在单线程环境中运行。
以下是 NCrunch 2.23.0.2 设置:
我在所有 SpecFlow 测试的 Assembly.cs 文件中输入了以下属性:
[assembly: Parallelizable(ParallelScope.None)]
没有成功; 异常不断出现。
有没有人知道如何使用 NUnit3.2.1 强制 NCrunch2.23.0.2 中的 SpecFlow2.0 使其认为它在单线程环境中执行?
感谢你的付出!
2016-5-31:更新
我安装了 SpecFlow 的新版本 2.1(自 2016 年 5 月 25 日起可用),但没有解决问题。
我用最少的代码创建了一个示例项目来生成问题。计算器实现是有状态的,不能在多线程环境中测试。
由于 CustomContext 中的(虚拟)静态引用“ScenarioContext.Current”,SpecFlow 引发异常。是的,我知道如果您打算在多线程测试环境中运行,您应该注入它。问题是 SpecFlow 认为它处于多线程环境中,但事实并非如此,也不应该如此。