如何在特征文件中使用变量
How to use variable in feature file
如何在特征文件中使用变量?具体来说,我需要使用 dateTime.now
。理想情况下,像...
Given the API returns items for "dateTime.now"
when my function is run
then I want that data in my database
并且在我的验收测试文件中...
[Given("The API returns line items for (.*)")]
这是解决这个问题的正确方法吗?我不确定如何在我的功能文件中使用变量。我希望我的验收测试使用当前日期。
最简单的方法是为 "right now":
编写返回行项目的特定步骤
Given the API returns items for right now
您可以从新版本调用其他版本的步骤:
[Given(@"the API returns items for right now")]
public void GivenTheAPIReturnsItemsForRightNow()
{
GivenTheAPIReturnsItemsFor(DateTime.Now);
}
这避免了步骤之间的代码重复。
我部分同意 Greg Brughardts 的回答。因为功能文件是您可以与业务利益相关者(或组织中的其他非 IT 人员)共享的东西,所以在功能文件中使用 'real world' 语言会更有意义。
此外,当您在测试结束时将其传递给报告工具时,它会更具可读性。
我会这样处理。 switch 语句可以很容易地添加其他类型的日期与真实世界的语言:
[Given("The API returns line items for '(.*)'")]
public void GivenTheAPIReturnsItemsForTime(string mydate)
{
switch (mydate)
{
case:"the current date":
HandleApiDateTime(DateTime.Now.ToString("dd-MM-yyyy"))
// pass the current date to the Api handler
break;
case:"yesterday":
HandleApiDateTime(DateTime.Now.AddDays(-1).ToString("dd-MM-yyyy"))
// pass yesterdays date to the Api handler
break;
default:
Console.Writeline("I didnt recognize this command");
// or other error handling
break;
}
}
private void HandleApiDateTime(DateTime mydate)
{
// do your api magic with a date object
}
您的功能文件可能看起来像
Given the API returns items for 'yesterday'
when my function is run
then I want that data in my database
在我看来,在测试中获取当前日期时间的一种最简单的方法是 [StepArgumentTransformation]
,然后您可以从中提取日期或其他内容。这样您就可以在 Gherkin 的其他步骤中使用 [StepArgumentTransformation]
,如下所示,从而减少代码
Given the API returns items for currentTime
Given the database1 returns items for rightNowTime
Given the database2 returns items for presentTime
以上只是 ex ,但基本上可以将其与您喜欢的任何字符串变量匹配
public class binding {
public DateTime datetime;
[Given(@"the API returns items for (.*)")]
[Given(@"Given the database1 returns items for (.*)")]
[Given(@"Given the database2 returns items for (.*)")]
public void currentDatetime(DateTime dt)
{
log.Info("current time: " + datetime);
log.Info("current date: " + datetime.Date);
}
[StepArgumentTransformation]
public DateTime convertToDatetime(string c)
{
datetime = DateTime.Now;
return datetime;
}
}
以上代码三次记录当前时间和当前日期
如何在特征文件中使用变量?具体来说,我需要使用 dateTime.now
。理想情况下,像...
Given the API returns items for "dateTime.now"
when my function is run
then I want that data in my database
并且在我的验收测试文件中...
[Given("The API returns line items for (.*)")]
这是解决这个问题的正确方法吗?我不确定如何在我的功能文件中使用变量。我希望我的验收测试使用当前日期。
最简单的方法是为 "right now":
编写返回行项目的特定步骤Given the API returns items for right now
您可以从新版本调用其他版本的步骤:
[Given(@"the API returns items for right now")]
public void GivenTheAPIReturnsItemsForRightNow()
{
GivenTheAPIReturnsItemsFor(DateTime.Now);
}
这避免了步骤之间的代码重复。
我部分同意 Greg Brughardts 的回答。因为功能文件是您可以与业务利益相关者(或组织中的其他非 IT 人员)共享的东西,所以在功能文件中使用 'real world' 语言会更有意义。 此外,当您在测试结束时将其传递给报告工具时,它会更具可读性。
我会这样处理。 switch 语句可以很容易地添加其他类型的日期与真实世界的语言:
[Given("The API returns line items for '(.*)'")]
public void GivenTheAPIReturnsItemsForTime(string mydate)
{
switch (mydate)
{
case:"the current date":
HandleApiDateTime(DateTime.Now.ToString("dd-MM-yyyy"))
// pass the current date to the Api handler
break;
case:"yesterday":
HandleApiDateTime(DateTime.Now.AddDays(-1).ToString("dd-MM-yyyy"))
// pass yesterdays date to the Api handler
break;
default:
Console.Writeline("I didnt recognize this command");
// or other error handling
break;
}
}
private void HandleApiDateTime(DateTime mydate)
{
// do your api magic with a date object
}
您的功能文件可能看起来像
Given the API returns items for 'yesterday'
when my function is run
then I want that data in my database
在我看来,在测试中获取当前日期时间的一种最简单的方法是 [StepArgumentTransformation]
,然后您可以从中提取日期或其他内容。这样您就可以在 Gherkin 的其他步骤中使用 [StepArgumentTransformation]
,如下所示,从而减少代码
Given the API returns items for currentTime
Given the database1 returns items for rightNowTime
Given the database2 returns items for presentTime
以上只是 ex ,但基本上可以将其与您喜欢的任何字符串变量匹配
public class binding {
public DateTime datetime;
[Given(@"the API returns items for (.*)")]
[Given(@"Given the database1 returns items for (.*)")]
[Given(@"Given the database2 returns items for (.*)")]
public void currentDatetime(DateTime dt)
{
log.Info("current time: " + datetime);
log.Info("current date: " + datetime.Date);
}
[StepArgumentTransformation]
public DateTime convertToDatetime(string c)
{
datetime = DateTime.Now;
return datetime;
}
}
以上代码三次记录当前时间和当前日期