Handling unit tests with a condition on the current time(处理具有当前时间条件的单元测试)
问题描述
我正在尝试为我正在处理的项目中的一些实用程序类设置单元测试,其中一个类(包含许可信息)具有一种基于当前时间进行某些确定的方法.
I'm taking a stab at setting up unit tests for some utility classes in a project I'm working on, and one of the classes (contains licensing info) has a method that does some determination based on the current time.
即许可证包含到期日期,并且许可证字符串验证该日期,但查看许可证是否过期的实际逻辑是基于当前时间.
i.e. the license contains an expiry date, and the license string validates that date, but the actual logic to see if the license is expired is based on the current time.
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()"不是静态标准.
So, I'm not sure what to do, since the 'new Date()' thing isn't a static criterion.
- 我是否应该不费心去测试 'isValid',而只测试 'isLicenseStringValid()' 和 'getExpiryDate()' 函数?
- 我是否只是在测试中使用过期时间很长的许可证密钥,这样我就可以在过期时换工作?
- 我是否尝试将 'new Date()' 模拟为一些 'getCurrentTime()' 方法,以便我可以伪造现在几点?
其他人通常如何处理时间条件测试?
What do others normally do with tests that are time-conditional?
推荐答案
一定要mock out new Date()
.
Definitely mock out new Date()
.
使用 getCurrentTime()
方法或类似方法创建一个 Clock
接口.这样你就可以有一个 FakeClock
用于测试和一个 SystemClock
使用 System.currentTimeMillis()
或其他.
Create a Clock
interface with a getCurrentTime()
method or something similar. That way you can have a FakeClock
for testing and a SystemClock
which uses System.currentTimeMillis()
or whatever.
我已经做过很多次了——效果非常好.这也是合乎逻辑的——实际上你需要一个当前时间服务",所以它应该像任何其他依赖项一样被注入.
I've done this a number of times - it's worked extremely well. It's logical too - effectively you require a "current time service" so that should be injected like any other dependency.
这篇关于处理具有当前时间条件的单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:处理具有当前时间条件的单元测试
基础教程推荐
- Java:带有char数组的println给出乱码 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 降序排序:Java Map 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01