用于获取系统时间的代理对象

时间:2012-09-22 01:57:56

标签: java guava

番石榴中有一个非常酷的Ticker概念。不幸的是,它似乎是围绕生成纳秒级聚焦秒表来设计,用于测量执行持续时间。

我想找到像这样使用的东西,因为它使测试类对时间变化更加敏感。我使用System.currentTimeMillis()时遇到了一个问题,因为很难模拟测试中的时间流逝。我正在考虑使用类似于Guava的界面,但是以毫秒为单位测量时间,因为它匹配更多可用的库。

我想问一下,在我自己写这篇文章之前,是否有人看过类似的东西或有其他建议。

3 个答案:

答案 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的毫秒时间。