1

在将我们的解决方案从 SpecFlow1.9 更新到 2.0 并将 NUnit2.6.4 更新到 3.2.1 之后,当使用 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()

异常文本中的链接http://go.specflow.org/doc-multithreaded建议的解决方案仅在您使用 SpecFlow 的内置迷你 IoC 时有效。但是,我们在 SpecFlow 测试中使用 NInject 作为 IoC。只需将静态字段 ScenarioContext.Current 包装在一个类中并在单例上下文中注册该类当然只是将问题转移到另一个地方。

当使用 NInject 而不是 SpecFlow 的内置 IoC 时,有人知道如何注入 ScenarioContext 吗?

4

1 回答 1

1

SpecFlow 现在通过每个容器的插件支持其他容器。只能使用一个容器,因为它被注入到 SpecFlows 容器中。所以如果你使用 Ninject 插件,那么你只能使用 Ninject 插件。

不幸的是,创建 Ninject 插件的开发人员没有将其发布到 NuGet,因此您必须自己构建它。

https://github.com/MattMcKinney/SpecFlow.Ninject

您可能想问他他的插件使用的是哪个许可证。

于 2019-12-01T03:21:33.370 回答