如何填充仅在执行期间生成的未知Cucumber或Specflow步骤参数?

时间:2019-06-05 22:24:03

标签: cucumber specflow

鉴于我执行了一些步骤,然后在某些步骤上我从数据库单元中获取了一个值。由于此值在执行之前是未知的,因此我无法使用功能文件中定义的任何绑定或表值,是否有任何方法可以将该值填充到“步骤定义=>”中,然后在其他报告中显示?

对于功能文件:

  1. 鉴于我将文件拖放到服务器的UNC路径

  2. 文件成功处理后

  3. 然后将一个新帐户加载为(。*)(这是在运行时生成的数字)

只能在与数据库的连接的最后一步知道该帐户,有什么方法可以将其放入步骤定义,以便稍后显示为:

新帐户已加载为100051359

1 个答案:

答案 0 :(得分:0)

SpecFlow无法实现您想要的操作。但是,您仍然可以从中得到很好的测试,但是您可能需要使用ScenarioContext在步骤之间共享数据。

处理文件的步骤将需要知道新加载的帐户ID。然后,该步骤可以将该帐户ID放入ScenarioContext中:

base_manager_name

稍后进行断言时,请在进行断言之前从方案上下文中获取帐户ID:

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

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

    [When(@"the file is processed successfully"]
    public void WhenTheFileIsProcessedSuccessfully()
    {
        var account = // process the file

        scenario.Set(account.Id, "AccountId");
    }
}

您的测试变为:

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

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

    [Then(@"a new account is loaded")]
    public void ThenANewAccountIsLoaded()
    {
        var account = accountRepository.Find(scenario.Get<int>("AccountId"));

        // Assert something about the account
    }
}