java - 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() 进行了快速修复,但这不是永久修复的选项。
解决方案
免责声明:我不隶属于 jira 触发器插件,所以我只能推测:
如果测试未在您的时区运行,则可能它们并非旨在这样做(无论出于何种原因,包括测试设计中的错误)。
如果是这样,作为一种解决方法,您可以考虑在 GMT 时区(偏移量为零)中运行测试过程。
您可以使用以下方法对任何 java 进程执行此操作:
java -Duser.timezone=GMT <MainClass>
我不知道这个插件是如何构建的,但我敢肯定,有一个选项可以为 maven/surefire 和 gradle 添加这样的属性
推荐阅读
- clojure - lein uberjar 永远服用
- javascript - 单引号 vs 双引号
- node.js - 如何获取在 graphQL 查询中定义的解析器中的返回字段列表?
- php - 如何解决错误 - NameError: variable @transition-speed is undefined?
- vue.js - 如何通过 vuejs 将组件标签附加/前置到表格中
- matlab - 在 MATLAB 中使用分段和切换
- azure - 如何将内容 MD5 设置为在 ADLS Gen2 中创建文件?
- python - 处理此字符串的最简洁方法
- javascript - 在python中创建shopify scripttag
- java - 如果没有用户登录,System.getProperty("user.name") 会打印什么