如何在特征文件中使用变量

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;
            }

    }

以上代码三次记录当前时间和当前日期