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

Nic*_*ion 5 java guava

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

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

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

Col*_*inD 5

正如你所指出的那样,Ticker是用于测量经过的时间(System.nanoTime()用于什么),而不是用于挂钟时间(System.currentTimeMillis()用于什么),你不应该用它来获得它.

我建议创建一个Clock类似的抽象类,Ticker但是以毫秒为单位获得挂钟时间.


Chr*_*ter 4

这就是我在我的项目中使用的:

public interface Clock {
    LocalDate today();
    LocalTime time();
    LocalDateTime now();
    long timestamp();
}
Run Code Online (Sandbox Code Playgroud)

正如您所说,它使单元测试变得更加简单(甚至可能)。我有一个始终返回真实时间并且FakeClock我可以控制的实现。它的实现非常简单,您可以轻松地推出自己的实现 - 我认为 Guava 中没有类似的东西。

在《Growing Object-Oriented Software, Guided by Tests》中也描述并推荐了这种方法。