gpt4 book ai didi

c# - 在 SpecFlow 中,我应该为我正在测试的对象使用类字段还是 ScenarioContext?

转载 作者:行者123 更新时间:2023-11-30 20:33:53 26 4
gpt4 key购买 nike

我正在使用 SpecFlow 测试 MortgageCalculator 类。我发现我有两种设置我的步骤文件的方法,一种是我有类级别的 MortgageCalculator,另一种是我使用 ScenarioContext(见下文)。哪个更好?

我发现选项 1 更容易,因为我不必一直获取和设置 ScenarioContext。但我被教导使用 ScenarioContext。

选项 1:

[Binding]
public sealed class MortgageCalculatorSteps
{
private MortgageCalculator calculator;

[Given(@"I have a MortgageCalculator")]
public void GivenIHaveAMortgageCalculator()
{
calculator = new MortgageCalculator();
}

[Then(@"I can do something with the calculator")]
public void ThenICanDoSomethingWithTheCalculator()
{
calculator.DoSomething();
}
}

选项 2:

[Binding]
public sealed class MortgageCalculatorSteps
{
[Given(@"I have a MortgageCalculator")]
public void GivenIHaveAMortgageCalculator()
{
var calculator = new MortgageCalculator();
ScenarioContext.Current.Set(calculator);
}

[Then(@"I can do something with the calculator")]
public void ThenICanDoSomethingWithTheCalculator()
{
var calculator = ScenarioContext.Current.Get<MortgageCalcualtor>();
calculator.DoSomething();
}
}

最佳答案

在我看来,您列出的两个选项都不是最佳解决方案。正如安德烈亚斯在另一个答案中指出的那样,最好的选择是使用 ContextInjection .为什么?

  • 在并行运行测试时工作,使用 ScenarioContext.Current 不会
  • 允许在包含步骤的不同类之间共享数据,这反过来又允许您以任何您想要的方式组织步骤,并避免拥有包含许多步骤方法的非常大的类
  • 允许您的数据是强类型的
  • 允许将您的数据收集到适当的内聚类中,每个类都保持单一职责原则

我们倾向于将这些类称为上下文,因此根据您的情况,我的选择可能是:

[Binding]
public sealed class MortgageCalculatorSteps
{
private MortgageCalculatorContext calculatorContext;

public MortgageCalculatorSteps(MortgageCalculatorContext calculatorContext)
{
this.calculatorContext=calculatorContext;
}

[Given(@"I have a MortgageCalculator")]
public void GivenIHaveAMortgageCalculator()
{
calculatorContext.Calculator = new MortgageCalculator();
// or you could do something like: calculator.InitialiseCalculator()
}

[Then(@"I can do something with the calculator")]
public void ThenICanDoSomethingWithTheCalculator()
{
calculatorContext.Calculator.DoSomething();
}
}

在像这样的简单示例中,好处可能并不明显,但根据我的经验,从长远来看,这会让您的生活变得更加简单。

关于c# - 在 SpecFlow 中,我应该为我正在测试的对象使用类字段还是 ScenarioContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com