黄瓜中的日期对象

Date object in Cucumber

我有一个像这样的黄瓜stepdef

Given the date of <date>
When blah blah
Then x y and z
Examples:
|2015-01-01|
|2045-01-01|

当我从中生成 stepdefs 时,我得到 @Given("^the date of (\d+)-(\d+)-(\d+)$") 并且该方法以三个整数作为参数生成。 我如何告诉 Cucumber 将其视为 Java.Time LocalDate?有没有办法创建 Cucumber 可以理解的映射器?或者至少,有没有办法将该日期对象视为字符串而不是三个数字?

修改您的步骤定义以接受整个日期的字符串。也许使用类似 (.*?) 的东西而不是 3 个整数。

@Given("^the date of (.*?)$")
public void storeDate(@Transform(DateMapper.class) LocalDate date){

}

变形金刚class

public class DateMapper extends Transformer<LocalDate>{

    @Override
    public LocalDate transform(String date) {

        //Not too sure about the date pattern though, check it out if it gives correct result
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        return LocalDate.parse(date, formatter); 
   }

}

Cucumber 应该为您将字符串格式转换为日期对象

请检查这是否有效 -

Scenario Outline: Date  
Given the date of <date>
When blah blah
Then x y and z
Examples:
|date      |
|2015-01-01|
|2045-01-01|

我已经像这样修改了默认步骤定义 -

@Given("^the date of (.*?)$")
public void the_date_of(String strDate) throws Throwable {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
    Date date = format.parse(strDate);
    System.out.println(date);
}

这会打印出这样的代码 -

Thu Jan 01 00:00:00 AEDT 2015
Sun Jan 01 00:00:00 AEDT 2045

对于 Cucumber 7,我正在定义一个新的 @ParameterType :

@ParameterType("\d{2}\.\d{2}\.\d{4}")
public LocalDate mydate(String dateString) {
    return LocalDate.parse(dateString, DateTimeFormatter.ofPattern("dd.MM.yyyy"));
}

然后我可以使用步骤定义 @Given 例如:

@Given("person has birthdate {mydate}")
public void person_birthdate(LocalDate birthDate) {
    ... // do something
}

占位符名称{mydate}是映射方法的名称,但您可以通过@ParameterType.name覆盖它。