【问题标题】: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 可以理解的映射器?或者至少,有没有办法将该日期对象视为字符串而不是三个数字?

【问题讨论】:

    标签: java cucumber gherkin


    【解决方案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("\\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覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多