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

处理带有当前时间条件的单元测试

杨选
2023-03-14
问题内容

我正在努力为正在研究的项目中的某些实用程序类设置单元测试,其中一个类(包含许可信息)具有一种根据当前时间进行确定的方法。

也就是说,许可证包含到期日期,并且许可证字符串会验证该日期,但是查看许可证是否过期的实际逻辑是基于当前时间。

public boolean isValid()
{
    return isLicenseStringValid() && !isExpired();
}

public boolean isExpired()
{
    Date expiry = getExpiryDate();
    if( expiry == null ) {
        return false;
    }

    Date now = new Date();

    return now.after( expiry );
}

因此,我不确定该怎么做,因为“ new Date()”不是静态标准。

  1. 我是否应该不费心地测试’isValid’,而只是分别测试’isLicenseStringValid()’和’getExpiryDate()’函数?
  2. 我是否只是在测试中使用了许可证密钥而疯狂地长期期满了,这样我将在其过期之前切换工作?
  3. 我是否尝试将’new Date()’模拟为某些’getCurrentTime()’方法,以便我可以伪造现在的时间?

其他人通常对有时间限制的测试做什么?


问题答案:

绝对模拟出来new Date()

Clock使用getCurrentTime()方法或类似方法创建接口。这样,您就可以FakeClock进行测试,并SystemClock可以使用System.currentTimeMillis()或其他方式。

我已经做了很多次-效果非常好。这也是合乎html" target="_blank">逻辑的-实际上,您需要“当前时间服务”,因此应该像其他依赖项一样注入。



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

  • 我希望在特定时间后打开带有链接的html按钮。 例如,链接www.google.com的按钮将在04/10/2021 08:30pm 0530 GMT之后打开 谢谢大家...

  • 问题内容: 我有一条指令,该指令的行为应有所不同,具体取决于自初始化以来经过的时间: 问题是,当我尝试使用Jasmine进行测试时,我似乎找不到以任何方式触发此超时的方法。已经尝试了和(如果我要注释调用,实际上会引发错误)。但是它仍然没有触发超时的回调执行 测试失败。 找不到我在做什么错。关于如何正确测试这种情况的任何提示? 谢谢。 UPD 经过一番调查,我发现在此特定的测试用例中,在功能上,服务

  • 我正在将vue cli与webpack模板一起使用,当我将模板文件拆分到不同的文件中,并运行或时,会出现以下错误: 警告。/src/组件/Hello.pug模块解析失败: /home/jmanuelrosa/Developer/test-vue/src/components/Hello.pug意外令牌(1:0)您可能需要适当的加载器来处理此文件类型。|. hello|h1{{msg}}|h2 Es

  • src/cmakelists.txt: src/sqr.h src/sqr.cpp null

  • 我需要延迟处理或发布文件名(文件)。我在寻找最好的选择。 目前,我有两个Apache Beam数据流和PubSub介于两者之间。首先,dataflow从源代码读取文件名,并将其推送到PubSub主题。另一个数据流读取它们并处理它们。然而,我的用例是在源代码中创建实际文件至少1小时后开始处理/读取这些文件。 所以我有两个选择: 1)延迟发布消息,以便在好的/预期的时刻立即处理它 2)延迟处理检索到的