鉴于我执行了一些步骤,然后在某些步骤上我从数据库单元中获取了一个值。由于此值在执行之前是未知的,因此我无法使用功能文件中定义的任何绑定或表值,是否有任何方法可以将该值填充到“步骤定义=>”中,然后在其他报告中显示?
对于功能文件:
鉴于我将文件拖放到服务器的UNC路径
文件成功处理后
然后将一个新帐户加载为(。*)(这是在运行时生成的数字)
只能在与数据库的连接的最后一步知道该帐户,有什么方法可以将其放入步骤定义,以便稍后显示为:
新帐户已加载为100051359
答案 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
}
}