模拟值对象很少是一个好主意。你应该模拟行为,而不是数据。我想您真正想要实现的是能够在测试中使用任意日期(这是一个好主意)。
我在这种情况下成功使用的模式是假系统时钟(来自该站点的示例):
public interface TimeSource {
long currentTimeMillis();
}
还有两个实现,真实的:
public final class RealSource implements TimeSource {
public long currentTimeMillis() {
return System.currentTimeMillis();
}
}
和假测试:
public final class FakeSource implements TimeSource {
public long currentTimeMillis() {
return //...whatever you want
}
}
我发现currentTimeMillis()
在辅助方法中制作 static 并使用static
指向 current 的字段很方便TimeSource
。
最后,更简单的方法是直接传递日期:
class Lekcja {
Calendar _date;
public Lekcja(Calendar date) {
this._date = date;
}
//...
}
也可以看看