用于黄瓜测试的Java序列化

时间:2017-08-02 14:45:10

标签: java cucumber serializer cucumber-java

您好我有一个看起来像这样的黄瓜测试

Given new "CucumberTest"    
| startDate               | endDate                 |
| 01/03/2016 08:00:00:UTC | 05/03/2016 17:00:00:UTC |  

测试代码看起来像这样

@Given("^new "([^"]*)"$")
public void test(@Format(DateFormta) List<Travel> travels) {
   ...
}

现在Travel类有int idDate startDateDate endDate个字段。 我想改变一个人旅行的国家的旅行时间。因此,假设服务器位于UTC+2时区,并且旅行位于UTC+1区域。当我运行应用程序时,它在我的cucmber测试代码中为我的开始和结束日期添加了2个小时,但我需要它只添加一个。是否可以使用java serializer或deserializer来自动更改?

1 个答案:

答案 0 :(得分:0)

TL;博士

Instant.now()
       .toString()

...和...

Instant.now()
       .atZone( ZoneId.of( "America/Montreal" ) )
       .toString()

不要使用java.util.Date

您正在使用java.util.Date课程?这是现在遗留下来的麻烦的旧日期时间类的一部分,取而代之的是java.time类。

java.time

在UTC时间轴上使用Instant片刻。相当于Date,但分辨率为纳秒而不是毫秒(以及许多其他改进)。

Instant instant = Instant.now() ;

生成/解析字符串时,java.time类默认使用标准的ISO 8601格式。

String output = instant.toString() ;
  

2017-01-23T12:34:56.987654321Z

最后的ZZulu的缩写,表示UTC。

永远不要依赖默认时区或偏移量。您可能无法在部署时控制。更糟糕的是,JVM中任何应用程序的任何线程中的任何代码都可以在运行时期间更改当前的默认

始终指定所需/预期的时区。

ZoneId z = ZoneId.of( "Europe/Berlin" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

在知道时始终使用时区而不是仅仅偏离UTC。时区是特定区域使用的过去,现在和将来的偏移的历史。

始终以continent/region格式使用时区的真实名称。