gpt4 book ai didi

c# - 是否可以模拟 Specflow 的 ScenarioContext? (C#)

转载 作者:行者123 更新时间:2023-12-05 07:09:36 29 4
gpt4 key购买 nike

尝试为使用 ScenarioContext 的 Specflow 步骤编写单元测试。此步骤试图从 ScenarioContext 中检索属性的值。是否可以模拟 ScenarioContext 以便我可以为此属性设置一个值?

在我的本地使用 VS 专业和 Moq 框架。谢谢

据我所知,ScenarioContext 没有实现任何接口(interface)。在 ScenarioContext 上尝试 Mock 失败(原因在下面的代码块中)

private Mock<IPropertyBucket> _propertyBucket;

ctor(){

var mo = new Mock<ScenarioContext>(); // this line fails as ScenarioContext has no public contructor.
mo.Object.Add("response", Response); // this property is what the specflow step is using eventually

_propertyBucket = new Mock<IPropertyBucket>();
_propertyBucket.Setup(pb => pb.ScenarioContext).Returns(mo.Object);
}

仅供引用:我正在研究多框架目标解决方案。该框架适用于 net472 和 netCore3.1.x。 .Net Core 和 .Net framework 的 ScenarioContext 实现是不同的。

最佳答案

发布我最终采用的伪代码,它在过去的一年里对我很有帮助,不需要进行任何更改。

基本上围绕 ScenarioContext 创建了一个包装器,它有一个 ScenarioContext 的私有(private)实例(以下代码中的 MyScenarioContext),现在只公开了所需的方法。不用说,包装器有一个绑定(bind)到它的接口(interface),它允许一起模拟 ScenarioContext。

public class ScenarioContext : IScenarioContext
{
public ScenarioContext(TechTalk.SpecFlow.ScenarioContext scenarioContext)
{
MyScenarioContext = scenarioContext;
}

private TechTalk.SpecFlow.ScenarioContext MyScenarioContext { get; }

public IObjectContainer ScenarioContainer => MyScenarioContext.ScenarioContainer;

public StepInfo StepInfo => MyScenarioContext.StepContext.StepInfo;

ScenarioInfo IScenarioContext.ScenarioInfo => MyScenarioContext.ScenarioInfo;

public bool Clear(string propertyName)
{
if (!MyScenarioContext.ContainsKey(propertyName)) return false;
MyScenarioContext.Remove(propertyName);
return true;
}

public T GetProperty<T>(string key)
{
if (MyScenarioContext.ContainsKey(key))
return (T)MyScenarioContext[key];
throw new Exception($"No key remembered with the name {key}");
}
//.
//.
//.
// Other useful functions such as Remember etc.
}

关于c# - 是否可以模拟 Specflow 的 ScenarioContext? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504826/

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