当前位置: 首页 > 面试题库 >

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

黄俊誉
2023-03-14
问题内容

我有一种方法,根据从当前日期开始,该方法对从数据库中获取的数据实施不同的逻辑。

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



 类似资料:
  • 问题内容: 我需要测试一个函数,该函数的结果将取决于当前时间(使用Joda time的时间)。 是否可以使用(例如使用Mockito)存根/模拟系统时间,以便我可以可靠地测试该功能? 问题答案: Joda time支持通过类的和方法设置“假”当前时间。 参见https://www.joda.org/joda- time/apidocs/org/joda/time/DateTimeUtils.htm

  • 问题内容: 假设我有以下模型: 我想通过创建一个在将来(今天+ 1或某天)结束的事件进行测试,并对日期和时间进行打桩,以便系统认为我们已经达到了该将来的日期。 就python而言,我希望能够存根所有系统时间对象。这包括,和任何其他标准日期/时间对象。 这样做的标准方法是什么? 问题答案: 编辑 :由于我的答案是此处接受的答案,因此我正在对其进行更新,以使所有人都知道在此同时创建了更好的方法,这是f

  • 英文原文:http://emberjs.com/guides/testing/unit-testing-basics/ 尽管Ember.Object是Ember中得基础对象类型,然后能够测试一个简单的Ember.Object是能测试Ember应用各个特定部分的基础。如控制器、组件等。测试Ember.Object就如创建一个对象实例一样简单,设置其状态并针对对象进行断言。作为实例,下面将来介绍一些一

  • 问题内容: 我在尝试在Angularjs中测试基于承诺的代码时遇到了困难。 我的控制器中有以下代码: 我想对以下情况进行单元测试: 什么时候被调用 当是做了应该改变的位置(调用) 在我看来,没有简单的方法可以分别测试这两种情况。 我要做的第一个测试是: 现在,要测试第二种情况,我需要创建另一个永远不变的虚假承诺。这一切都非常乏味,并且有很多样板代码。 还有其他测试方法吗?还是我的设计有异味? 问题

  • 首先所有的包都应该有一定的必要文档,然后同样重要的是对包的测试。 在第 3 章中提到了 Go 的测试工具 gotest, 我们已经在 9.8 节中使用过了。这里我们会用更多的例子进行详细说明。 名为 testing 的包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能。 备注:gotest 是 Unix bash 脚本,所以在 Windows 下你需要配置 MINGW 环

  • 我试图讨论下面SonarQube通过代码覆盖的if条件。SonarQube说2个条件中的1个都被覆盖了。如果有人能帮我把这两件事都盖上,我将不胜感激。 我已经声明了变量,并拥有了setter和getter。 下面是我要介绍的代码: 下面是测试2个条件中的1个条件的代码: