Как использовать переменную в файле объектов - PullRequest
0 голосов
/ 20 сентября 2019

Как я могу использовать переменные в моем файле функций?В частности, мне нужно использовать 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 (.*)")]

Это правильный путь?Я не уверен, как использовать переменные в моем файле возможностей.Я хочу, чтобы мой приемочный тест использовал текущую дату .

Ответы [ 3 ]

4 голосов
/ 23 сентября 2019

Самый простой способ - написать шаг, специфичный для возврата элементов строки для «прямо сейчас»:

Given the API returns items for right now

Вы можете вызвать другую версию шага из новой версии:

[Given(@"the API returns items for right now")]
public void GivenTheAPIReturnsItemsForRightNow()
{
    GivenTheAPIReturnsItemsFor(DateTime.Now);
}

Это позволяет избежать дублирования кода между шагами.

2 голосов
/ 24 сентября 2019

Я частично согласен с ответом Грега Бругардса.Поскольку файл функций - это то, чем вы можете поделиться с бизнес-заинтересованными сторонами (или другими лицами, не являющимися ИТ-специалистами в вашей организации), было бы более целесообразно использовать язык «реального мира» в ваших файлах компонентов.Кроме того, когда вы передадите это инструменту отчетности в конце теста, оно будет более читабельным.

Я бы подошел к этому так.Оператор 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
1 голос
/ 25 сентября 2019

Один способ, самый простой, по моему мнению, получить текущую дату в вашем тесте - это [StepArgumentTransformation], и тогда вы можете извлечь из нее дату или другие вещи.Таким образом, вы можете использовать [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;
            }

    }

Приведенный выше код регистрирует текущее время и текущую дату три раза

...