黄瓜中的日期对象

Posted

技术标签:

【中文标题】黄瓜中的日期对象【英文标题】:Date object in Cucumber 【发布时间】:2017-03-03 00:03:05 【问题描述】:

我有一个像这样的黄瓜 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 可以理解的映射器?或者至少,有没有办法将该日期对象视为字符串而不是三个数字?

【问题讨论】:

【参考方案1】:

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

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


变压器类

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 应该为您将字符串格式转换为日期对象

【讨论】:

我仍然得到@Given("^the date of (\\d+)-(\\d+)-(\\d+)$") 并且该方法是用三个整数作为参数生成的.我如何告诉 Cucumber 处理错误 您正在使用黄瓜生成的默认方法 stepdef 模式和参数。将其编辑为您希望将数据导入方法的字符串模式和参数。【参考方案2】:

请检查这是否有效 -

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

【讨论】:

仍然得到@Given("^(\\d+)-(\\d+)-(\\d+)$") 的日期,并以三个整数为参数生成方法。我如何告诉 Cucumber 处理错误【参考方案3】:

使用 Cucumber 7,我正在定义一个新的 @ParameterType

@ParameterType("\\d2\\.\\d2\\.\\d4")
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覆盖。

【讨论】:

以上是关于黄瓜中的日期对象的主要内容,如果未能解决你的问题,请参考以下文章

黄瓜报告json文件中的持续时间单位是啥?

为黄瓜中的每个步骤分配一个 ID

黄瓜中的特征文件设置

在大型代码库/团队中重用黄瓜步骤

我如何刻意说黄瓜跳过当前场景中的其余步骤(java)

如何通过黄瓜选项通过带有黄瓜功能文件的命令行传递应用程序 URL?