【发布时间】:2019-08-07 18:32:09
【问题描述】:
基于这个answer,我决定实现我自己的MutableClock 用于单元测试目的,其工作方式略有不同:
class MutableClock extends Clock {
private final List<Instant> instants = new ArrayList<>();
public MutableClock(Instant now, TemporalAmount... amounts) {
Objects.requireNonNull(now, "now must not be null");
Objects.requireNonNull(amounts, "amounts must not be null");
instants.add(now);
for (TemporalAmount amount : amounts) {
Instant latest = instants.get(instants.size() - 1);
instants.add(latest.plus(amount));
}
}
@Override
public Instant instant() {
Instant latest = instants.get(0);
if (instants.size() > 1) {
instants.remove(0);
}
return latest;
}
...
但后来我注意到我在这里这样做:
instants.add(latest.plus(amount));
所以,基本上,我只能将时钟“向前”打勾。当然,这在大多数情况下是有道理的,但由于所有这些都是为了单元测试,我可以想象我想使用这样的 MutableClock 实例并让它返回并不总是“增加”的瞬间。
但是在查看TemporalAmount 界面时:没有办法表示否定时间量?!换句话说:TemporalAmount 的实例似乎没有“签名”。
那么,怎么办呢?
【问题讨论】:
-
有否被否决者投票?
-
“没有办法表示负的时间量?!”诶?让
get(TemporalUnit unit)返回一个负值。