【问题标题】:SpecFlow: how to inject ScenarioContext when NInject is used as IoCSpecFlow:当 NInject 用作​​ IoC 时如何注入 ScenarioContext
【发布时间】:2016-05-30 11:01:44
【问题描述】:

在将我们的解决方案从 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 吗?

【问题讨论】:

  • 可能与this issue有关
  • 另外,举例说明您如何使用自己的 IoC 可能会很有用,因为无论您使用什么来构建被测系统,Specflow 都将使用其 IoC 进行测试。

标签: c# nunit ninject specflow ncrunch


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2020-08-13
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多