我有一个方法可以根据当前日期对从数据库中获取的数据实现不同的逻辑。
我想通过让单元测试创建对象、将它们保存在数据库中并调用测试方法来测试它。但是,为了获得可预测的结果,我每次都需要更改系统日期,但我不知道如何在 Java 中执行此操作。
建议?
最佳答案
您可以使用当前日期生成预期结果。
或者您将系统编写为使用测试时提供的日期/时间(而不是时钟)这样时间始终是测试所期望的时间。
我用类似的东西
interface TimeSource {
long currentTimeMS(); // actually I have currentTimeNS
void currentTimeMS(long currentTimeMS);
}
enum VanillaTimeSource implements TimeSource {
INSTANCE;
@Override
public long currentTimeMS() {
return System.currentTimeMillis();
}
@Override
public void currentTimeMS(long currentTimeMS) {
// ignored
}
}
class FixedTimeSource implements TimeSource {
private long currentTimeMS;
@Override
public long currentTimeMS() {
return currentTimeMS;
}
@Override
public void currentTimeMS(long currentTimeMS) {
this.currentTimeMS = currentTimeMS;
}
}
在测试中,我使用 FixedTimeSource,它可以由数据驱动,例如由输入/事件设置。在生产中,我使用 VanillaTimeSource.INSTANCE 忽略输入/事件中的时间并使用当前时间。
关于java - Java 中基于时间的逻辑单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410046/