番石榴中有一个非常酷的Ticker概念。不幸的是,它似乎是围绕生成纳秒级聚焦秒表来设计,用于测量执行持续时间。
我想找到像这样使用的东西,因为它使测试类对时间变化更加敏感。我使用System.currentTimeMillis()
时遇到了一个问题,因为很难模拟测试中的时间流逝。我正在考虑使用类似于Guava的界面,但是以毫秒为单位测量时间,因为它匹配更多可用的库。
我想问一下,在我自己写这篇文章之前,是否有人看过类似的东西或有其他建议。
答案 0 :(得分:5)
正如您所指出的那样,Ticker
用于衡量已过去的时间(System.nanoTime()
的用途),而不是挂钟时间(System.currentTimeMillis()
的用途)你不应该用它来获得它。
我建议创建一个类似Clock
的抽象Ticker
类,但要以毫秒为单位获取挂钟时间。
答案 1 :(得分:4)
这就是我在项目中使用的内容:
public interface Clock {
LocalDate today();
LocalTime time();
LocalDateTime now();
long timestamp();
}
正如您所说,它使单元测试更简单(甚至可能)。我有一个实现总是返回真实时间和我可以控制的FakeClock
。它的实现非常简单,你可以很容易地自己滚动 - 我不认为它在Guava中有类似的东西。
此方法也在Growing Object-Oriented Software, Guided by Tests中进行了描述和推荐。
答案 2 :(得分:0)
编辑:经过进一步思考,我喜欢克里斯托夫和科林的建议。壁钟类似功能的想法会很好。
正如所指出的,这里最好的策略可能只是实现一个方法,它将读取Ticker的毫秒时间。