当前位置: 首页 > 知识库问答 >
问题:

如何使用JUnit对依赖时间的方法进行单元测试

常波
2023-03-14

我有以下方法,它采用UNIX时间戳并以天、小时或分钟的形式返回年龄。我想用JUnit单元测试它,但我不确定如何开始这样做,因为当前时间不断变化。有什么建议吗?谢谢!

方法如下:

public static String getAge(long unixTime) throws Exception {
        long diff = (System.currentTimeMillis() / 1000) - unixTime;
    diff = diff / 60;
    if (diff < 60) {
        return Math.round(diff) + " m";
    }
    else
        diff /= 60;
    if (diff < 24) {
        return Math.round(diff) + " h";
    }
    else {
        diff /= 24;
        return Math.round(diff) + " d";
    }

}

共有2个答案

颛孙品
2023-03-14

您应该更改方法的设计以同时接受当前时间和unixTime,或者您必须从纯JUnit退后并使用PowerMock模拟System.currentTimeMillis()来返回所需的结果。

王君墨
2023-03-14

我会基于当前时间在unitTest中构建一个unix时间戳。该方法结果的粒度足够粗,以至于创建参数时与执行该方法时之间的几毫秒差不会太大。当然,您需要避开边界条件,即60分钟24小时的unixTime。

public void testMinutes() {
    Instant minutesAgo = Instant.ofEpochMilli(System.currentTimeMillis() - 15 * 60 * 1000);
    String result = getAge(minutesAgo.getEpochSecond());
    assertSomething...
}

以此类推进行数小时和数天的测试。

 类似资料:
  • 问题内容: 我有一段代码,我不知道如何进行单元测试!该模块使用urllib2从外部XML提要(twitter,flickr,youtube等)中提取内容。这是一些伪代码: 我的第一个想法是腌制响应并加载它以进行测试,但是显然urllib的响应对象是不可序列化的(它引发了异常)。 仅从响应主体保存XML是不理想的,因为我的代码也使用标头信息。它旨在作用于响应对象。 当然,在单元测试中依赖外部数据源是

  • 我是TDD的忠实粉丝,我通常在编写代码之前为我的大学作业编写测试用例。下面是我作业的界面:

  • 我有一个触发器,当opportunity更新时触发,作为其中的一部分,我需要调用我们的API,并提供opportunity的一些详细信息。 根据Web上的许多建议,我创建了一个类,其中包含一个@Future方法来制作标注。 我试图捕获在@future方法中抛出的异常,但测试方法没有看到它。 测试中的类如下所示: 下面是单元测试: 现在,我已经读到,测试@future方法的方法是用测试来围绕调用。s

  • 我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?

  • 我有DaoImpl类: 我的测试是: 测试是成功的,但是当我运行具有覆盖率的junit测试时,它显示方法没有被覆盖,因此我的整体单元测试行覆盖率低于要求。我们能涵盖那部分吗?如果是,我们怎么做?谢了。

  • 最近,我尝试为akka参与者编写一些单元测试,以测试参与者消息流。我在测试中观察到一些奇怪的行为: 下一个 在我的代码中,我有: 基本上,有时(很少)这样的测试失败(在另一个操作系统上),并且抛出processMessage方法的异常(由于业务逻辑导致的IllegalStateException)。