Java 用于获取系统时间的代理对象
在番石榴中有一个非常酷的概念。不幸的是,它似乎是围绕着产生纳秒聚焦秒表来测量执行时间而设计的 我想找到这样的东西,因为它使测试类对时间变化敏感变得更容易。我在使用Java 用于获取系统时间的代理对象,java,guava,Java,Guava,在番石榴中有一个非常酷的概念。不幸的是,它似乎是围绕着产生纳秒聚焦秒表来测量执行时间而设计的 我想找到这样的东西,因为它使测试类对时间变化敏感变得更容易。我在使用System.currentTimeMillis()时遇到过一个问题,因为在测试中很难模拟时间的流逝。我在考虑使用一个与Guava类似的界面,但是用毫秒来测量时间,因为它匹配更多的可用库 在我自己写之前,我想问问是否有人看过类似的东西或有其他建议。编辑:经过进一步思考,我喜欢克里斯托夫和科林的建议。为挂钟提供类似功能的想法会很好 正如所
System.currentTimeMillis()
时遇到过一个问题,因为在测试中很难模拟时间的流逝。我在考虑使用一个与Guava类似的界面,但是用毫秒来测量时间,因为它匹配更多的可用库
在我自己写之前,我想问问是否有人看过类似的东西或有其他建议。编辑:经过进一步思考,我喜欢克里斯托夫和科林的建议。为挂钟提供类似功能的想法会很好
正如所指出的,这里最好的策略可能只是实现一种方法,该方法将读取一毫秒的时间 正如您所指出的,
Ticker
用于测量经过的时间(System.nanoTime()用于测量时间),而不是挂钟时间(System.currentTimeMillis()用于测量时间),您不应该使用它来获取时间
我建议创建一个抽象的
Clock
类,类似于Ticker
,但用于获取以毫秒为单位的挂钟时间。这就是我在项目中使用的:
public interface Clock {
LocalDate today();
LocalTime time();
LocalDateTime now();
long timestamp();
}
正如您所说,它使单元测试变得更简单(甚至可能)。我有一个总是返回真实时间的实现和一个我可以控制的FakeClock
。它的实现是如此简单,你可以轻松地推出自己的-我认为在番石榴中没有类似的东西
此方法也在。Wait中介绍和推荐。除了以毫秒为单位测量时间外,您还需要一个<代码>自动售票机?从纳秒转换成纳秒是个问题,有什么特别的原因吗?@NickCampion:这不是个坏问题。见我的答案。谢谢你的反馈,科林。即使你们说了同样的话,我还是要给克里斯托夫一个“答案”,因为我最终使用了他定义的精确时钟。如果我能记下两个答案,你会是#2:)不幸的是,我还决定使用乔达时间,所以我的时钟没有意义再回到番石榴。真糟糕。谢谢你的想法和参考书,看起来很有趣。