首页 > 解决方案 > Hamcrest 测试奇怪的时移失败

问题描述

我正在尝试构建https://github.com/jenkinsci/jira-trigger-plugin并在与时间/日期相关的测试中失败:

expect commentEvent.issue.creationDate, is(new DateTime(1980, 1, 1, 0, 0, 0, 0))

失败:

Condition not satisfied:

expect commentEvent.issue.creationDate, is(new DateTime(1980, 1, 1, 0, 0, 0, 0))
|      |            |     |                |
false  |            |     |                1980-01-01T00:00:00.000+03:00
       |            |     1980-01-01T03:00:00.000+03:00
<...>
Expected: is <1980-01-01T00:00:00.000+03:00>
 but: was <1980-01-01T03:00:00.000+03:00>

可以看出,失败是由于时间偏移,它等于时区偏移量。

但是根据时间戳,时区被考虑在内。

我已经使用 JodaTime 的 .minusHours() 进行了快速修复,但这不是永久修复的选项。

标签: javadatetimetestingjodatimehamcrest

解决方案


免责声明:我不隶属于 jira 触发器插件,所以我只能推测:

如果测试未在您的时区运行,则可能它们并非旨在这样做(无论出于何种原因,包括测试设计中的错误)。

如果是这样,作为一种解决方法,您可以考虑在 GMT 时区(偏移量为零)中运行测试过程。

您可以使用以下方法对任何 java 进程执行此操作:

java -Duser.timezone=GMT <MainClass>

我不知道这个插件是如何构建的,但我敢肯定,有一个选项可以为 maven/surefire 和 gradle 添加这样的属性


推荐阅读