Binding SpecFlow-上下文注入与场景上下文

Binding SpecFlow-上下文注入与场景上下文,binding,specflow,gherkin,scenarios,context-injection,Binding,Specflow,Gherkin,Scenarios,Context Injection,任何使用SpecFlow的人都可能会遇到用于跨不同绑定类存储数据的上下文注入和场景上下文。(有关更多详细信息,请参阅:) 作为开发人员,与上下文注入相比,场景上下文似乎非常脆弱。您使用字符串来保存和检索数据,它基本上是一个全局变量系统,这在我看来通常是错误的。另一方面,依赖注入可以很好地处理不同的类,这些类可以被创建来存储不同类型的数据 有人知道为什么要使用场景上下文而不是上下文注入吗?我想不出有什么,但也许我遗漏了什么?区别在于:除了上下文注入之外,它还提供了更好的静态类型安全性。(我写了一篇

任何使用SpecFlow的人都可能会遇到用于跨不同绑定类存储数据的上下文注入和场景上下文。(有关更多详细信息,请参阅:)

作为开发人员,与上下文注入相比,场景上下文似乎非常脆弱。您使用字符串来保存和检索数据,它基本上是一个全局变量系统,这在我看来通常是错误的。另一方面,依赖注入可以很好地处理不同的类,这些类可以被创建来存储不同类型的数据


有人知道为什么要使用场景上下文而不是上下文注入吗?我想不出有什么,但也许我遗漏了什么?

区别在于:除了上下文注入之外,它还提供了更好的静态类型安全性。(我写了一篇关于可以通过上下文注入构建的分散式体系结构模型的文章:)

为什么是情景语境?首先,这个特性在上下文注入之前就已经存在,并且已经在很多教程中使用过,所以它更为人所知

另外,场景上下文在某种程度上是一个更容易的编程概念。您只需获取并设置一些全局变量。对于上下文注入,您必须了解构造函数、实例字段和局部变量。我认为无论如何,这些都是需要学习的重要内容,但如果没有帮助的话,可能一下子就太多了


场景上下文可能也很有用,因为当您编写通用的SpecFlow插件时,您不想依赖于具体项目的依赖关系管理系统的详细信息,但无论如何,这是一个非常特殊的情况。

场景上下文使用字符串。这意味着您可以通过字符串作为测试的参数。您可以编写一个通用测试方法来将某些内容存储在场景上下文变量中。 例如:

你可以重复使用这个。用不同的名称保存不同的int。 我不确定这是好的还是坏的做法,但我已经在我工作的框架中看到了它的使用。
我不确定是否有办法通过上下文注入实现这一点。

上下文注入使用对象。还不如用这些字段创建一个POCO。同意,上下文注入更可取,因为它是面向对象的。C#是面向对象的,如果你不了解这些概念,就无法在其中生存。
public void GenericSaveIntTestMethod(string variableName, int intToSave){

    ScenarioContext.Current[variableName] = intToSave;

}