【发布时间】:2020-08-20 02:02:59
【问题描述】:
据说我正在为一个依赖于specs 的库的集成测试做出贡献,而底层实现是用Scala 编写的。测试更倾向于带有timestamp 属性的事件流。
以下存根是实际实现的一部分
private def eligibleForRecentPost(optionalPost: Option[SearchEntity]): Boolean = {
optionalSearch.map(search => search.timestamp)
.exists(searchTime => searchTime >= LocalDateTime.now()
.minusDays(recencyDurationInDays).atZone(ZoneId.systemDefault).toInstant.toEpochMilli)
}
现在,我要查找的代码可能类似于
// just a mock
when(LocalDateTime.now().minusDays(any)
.atZone(ZoneId.systemDefault).toInstant.toEpochMilli)
.thenReturn(1579625874972)
注意,我知道测试中的 search.timestamp 可以更新,但这需要在每个 recencyDurationInDays 之后更新事件!!
但是在 specs2 和/或 scala 中是否有更好、更可靠的方法来做到这一点?
编辑:我必须提一下,我不期待更改实现以使 LocalDateTime 被另一个类覆盖/包装。
【问题讨论】:
-
很遗憾您不能或不会修改实现。对于任何可以的人,请允许我建议答案在这个问题中:Writing and testing convenience methods using Java 8 Date/Time classes。和/或here。
-
@OleV.V.确实。在发布问题之前,我已经浏览了 StackOverflow 上的所有此类链接,这也是明确编辑的原因。我很想理想地修改实现,但这并不总是实际上可能的。 :)
标签: scala mockito java-time specs2 localdatetime