在用于存储运行时值的测试项目中,我在SpecFlow中使用了许多“测试上下文”变量,如下所示。我在VS2018中将SpecFlow与C#一起使用。
ScenarioContext.Current["PostResponse"] = postResponse;
ScenarioContext.Current["PutResponse"] = putResponse;
但是当前实现上有一些更改,PUT响应需要更改为POST响应才能创建新对象,并在更新对象时保持原样。因此,现在我必须根据场景分别更新场景上下文的每个部分,并需要对其进行更新。这不是明智的做法。我本来可以将“ objectcreationResponse”,“ objectupdateResponse”存储在一个普通的地方,所以在一个地方进行更改会更容易。而且我在运行时使用了很多Scneario上下文。有没有更好的使用方法?
答案 0 :(得分:0)
您可以使用C#扩展方法集中进行此操作:
public static class ScenarioContextExtensions
{
public static UpdateResponseType GetUpdateReponse(this ScenarioContext context)
{
return context["updateResponse"] as UpdateResponseType;
}
public static void SetUpdateResponse(this ScenarioContext context, UpdateResponseType updateResponse)
{
return context["updateResponse"] = updateResponse;
}
}
现在在任何地方都有ScenarioContext对象,您都已强力键入了用于此公共信息的getter和setter:
ScenarioContext.Current.GetUpdateResponse();
ScenarioContext.Current.SetUpdateResponse(...);
这使您可以利用Visual Studio中提供的所有重构工具,从而减轻您描述的问题。