如何通过上下文注入共享SpecFlow中的步骤绑定类

康齐262

我在SpecFlow中使用了上下文注入,但是遇到一个问题,我想共享一个步骤绑定类,但是我不必注册所有的构造函数参数。

我在单独的绑定/挂钩类中有各种BeforeScenario挂钩,在其中我向容器注册对象,如下所示。

[Scope(Scenario = "Scenario A")]
[BeforeScenario(Order = 5)]
public void CreateApprenticeWithChecklist()
{
    //Other stuff

    _container.RegisterInstanceAs<Apprentice>(apprentice);
}

[Scope(Scenario = "Scenario B")]
[BeforeScenario(Order = 5)]
public void CreateApprenticeWithChecklistAllSignOff()
{
    //Other stuff

    _container.RegisterInstanceAs<Apprentice>(apprentice);
    _container.RegisterInstanceAs<Dictionary<string, UserDetails>>(new Dictionary<string, UserDetails>
    {
        ["Employer"] = employer.Key,
        ["Training Provider"] = trainingProvider.Key
    });
}

然后,我有了这两种方案都将使用的步骤定义类。

[Binding]
public sealed class ApprenticeChecklistSteps
{
    private Apprentice _apprentice;
    private UserDetails _employer;
    private UserDetails _trainingProvider;   

    public ApprenticeChecklistSteps(Apprentice apprentice, Dictionary<string, UserDetails> userDetails)
    {
        _apprentice = apprentice;
        _employer = userDetails["Employer"];
        _trainingProvider = userDetails["Training Provider"];
    }

    //etc

问题是,如果我正在运行Scenario A,将没有任何注册Dictionary<string, UserDetails> userDetails,因此我会收到Multiple public constructors with same maximum parameter count are not supported!错误消息。

如果我不一定需要或不需要某个构造函数参数,如何在场景之间共享步骤绑定?

我看到的唯一解决方案是hacky

为所有未使用的构造函数参数创建“空白”注册,以便对其进行初始化

要么...

创建一个包含所有可能的注册的单独的POCO,并在需要时注册我需要的任何内容

public class CheckListContext
{
    public Apprentice Apprentice { get; set; }
    public Dictionary<string, UserDetails> UserDetails { get; set; }
}

然后,场景A中的注册BeforeScenario将变为...

_container.RegisterInstanceAs<CheckListContext>(new CheckListContext{Apprentice = apprentice});
格雷格·伯格哈特(Greg Burghardt)

看来您只想在步骤之间共享数据,而不是步骤绑定。在SpecFlow中执行此操作的方法是使用场景上下文在一个步骤中设置数据并在另一步骤中检索数据。例如,我将有一个名为的步骤Given an apprenticeship exists为此的步骤定义将类似于:

[Binding]
public class ApprenticeshipSteps
{
    private readonly ScenarioContext scenario;

    public ApprenticeshipSteps(ScenarioContext scenario)
    {
        this.scenario = scenario;
    }

    [Given(@"an apprenticeship exists")]
    public void GivenAnApprenticeshipExists()
    {
        var apprenticeship = new Apprenticeship(...);

        scenario["apprenticeship"] = apprenticeship;

        // save to database if need be
    }
}

[Binding]
public class MoreStepDefinitions
{

    private readonly ScenarioContext scenario;

    public MoreStepDefinitions(ScenarioContext scenario)
    {
        this.scenario = scenario;
    }

    [Then(@"a step that needs the apprenticeship")]
    public void AnotherStep()
    {
        var apprenticeship = (Apprenticeship)scenario["apprenticeship"];
    }
}

如果需要,可以将学徒ID放在方案上下文中,而不是从数据库中获取。场景上下文基本上只是从步骤定义到步骤定义传递的一袋数据。这是在SpecFlow中的步骤之间共享数据的首选方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Specflow上下文注入

来自分类Dev

如何通过上下文从一个类的方法的意图是什么?

来自分类Dev

specflow生成上下文菜单中缺少的步骤定义

来自分类Dev

IWebDriver的Specflow上下文注入失败

来自分类Dev

IWebDriver的Specflow上下文注入失败

来自分类Dev

通过上下文菜单在终端中运行脚本(通过终端打开)?

来自分类Dev

JavaCC可以通过上下文区分令牌吗?

来自分类Dev

派生实例可通过上下文键入

来自分类Dev

FFmpeg通过上下文菜单项转换

来自分类Dev

Akka-如何通过上下文切换保持状态

来自分类Dev

如何使nemo支持通过上下文菜单压缩文件?

来自分类Dev

如何使用 Ajax 更新通过上下文传递的 Django 变量

来自分类Dev

在Golang中通过上下文取消net.Listener

来自分类Dev

通过上下文提供程序中的参数传递函数

来自分类Dev

无法选择Windows 7中通过上下文菜单打开的默认程序形式

来自分类Dev

如何在iOS 7(越狱)中通过上下文ID或Mach端口获取应用程序的捆绑标识符?

来自分类Dev

通过Django中的类传递上下文变量

来自分类Dev

如何通过上下文操作栏处理汉堡包图标和插入符号图标?

来自分类Dev

使用<Provider>通过上下文传递存储在基于connect()的方案中不起作用

来自分类Dev

如何从测试中注入上下文

来自分类Dev

服务中的上下文绑定错误

来自分类Dev

如何将文本框绑定到不在数据上下文类中的类

来自分类Dev

通过上下文菜单运行cmd时,PATH变量不同

来自分类Dev

使用泛型通过上下文获取Spring bean

来自分类Dev

获取Eclipse来识别Spring MVC项目中通过上下文包含的CSS

来自分类Dev

通过上下文清单的VIM选择,而不是按字母顺序排列

来自分类Dev

通过上下文更新单个状态时,为什么要完全重新渲染组件?

来自分类Dev

django:通过上下文字典将元素传递到我的模板

来自分类Dev

XBRL:通过上下文将事实连接到演示文稿

Related 相关文章

  1. 1

    Specflow上下文注入

  2. 2

    如何通过上下文从一个类的方法的意图是什么?

  3. 3

    specflow生成上下文菜单中缺少的步骤定义

  4. 4

    IWebDriver的Specflow上下文注入失败

  5. 5

    IWebDriver的Specflow上下文注入失败

  6. 6

    通过上下文菜单在终端中运行脚本(通过终端打开)?

  7. 7

    JavaCC可以通过上下文区分令牌吗?

  8. 8

    派生实例可通过上下文键入

  9. 9

    FFmpeg通过上下文菜单项转换

  10. 10

    Akka-如何通过上下文切换保持状态

  11. 11

    如何使nemo支持通过上下文菜单压缩文件?

  12. 12

    如何使用 Ajax 更新通过上下文传递的 Django 变量

  13. 13

    在Golang中通过上下文取消net.Listener

  14. 14

    通过上下文提供程序中的参数传递函数

  15. 15

    无法选择Windows 7中通过上下文菜单打开的默认程序形式

  16. 16

    如何在iOS 7(越狱)中通过上下文ID或Mach端口获取应用程序的捆绑标识符?

  17. 17

    通过Django中的类传递上下文变量

  18. 18

    如何通过上下文操作栏处理汉堡包图标和插入符号图标?

  19. 19

    使用<Provider>通过上下文传递存储在基于connect()的方案中不起作用

  20. 20

    如何从测试中注入上下文

  21. 21

    服务中的上下文绑定错误

  22. 22

    如何将文本框绑定到不在数据上下文类中的类

  23. 23

    通过上下文菜单运行cmd时,PATH变量不同

  24. 24

    使用泛型通过上下文获取Spring bean

  25. 25

    获取Eclipse来识别Spring MVC项目中通过上下文包含的CSS

  26. 26

    通过上下文清单的VIM选择,而不是按字母顺序排列

  27. 27

    通过上下文更新单个状态时,为什么要完全重新渲染组件?

  28. 28

    django:通过上下文字典将元素传递到我的模板

  29. 29

    XBRL:通过上下文将事实连接到演示文稿

热门标签

归档