java - Java 中基于时间的逻辑单元测试

标签 java unit-testing date time

我有一个方法可以根据当前日期对从数据库中获取的数据实现不同的逻辑。

我想通过让单元测试创​​建对象、将它们保存在数据库中并调用测试方法来测试它。但是,为了获得可预测的结果,我每次都需要更改系统日期,但我不知道如何在 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/

相关文章:

delphi - DUnit:如何运行测试?

java - JPA Hibernate ManyToMany、级联和 FK

java - 为什么 getColumnType 不适用于数字类型?

Java MySQL 语法错误

c# - ASP.NET 5 - MVC 6 - 单元测试使用 Url.Action 的 Controller

javascript - 如何使用 Jack 在 jQuery 中模拟 .each 和 .find 方法?

mysql - 将表中日期时间的所有列转换为不同的日期格式

javascript - 从忽略时区的 Unix 时间戳创建日期

java - 是否可以在 xslt 中格式化一个大的小数日期

java - 在 maven 项目中找不到目标运行时