java - 时间相关的单元测试

标签 java junit

我需要测试一个函数,它的结果将取决于当前时间(使用 Joda 时间的 isBeforeNow(),它确实发生了)。

public boolean isAvailable() {
    return (this.someDate.isBeforeNow());
}

是否可以使用(例如使用 Mockito) stub /模拟系统时间,以便我可以可靠地测试该功能?

最佳答案

使您的代码可测试的最佳方法 (IMO) 是将“当前时间是多少”的依赖关系提取到其自己的接口(interface)中,其中一个实现使用当前系统时间(正常使用),一个实现让您设置时间,根据需要提前等。

我在各种情况下都使用过这种方法,而且效果很好。它很容易设置 - 只需创建一个界面(例如 Clock),它有一个方法可以以您想要的任何格式为您提供当前瞬间(例如使用 Joda Time,或者可能是 Date )。

关于java - 时间相关的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5622194/

相关文章:

java - 断言集合中的每个字符串都包含子字符串的最佳方法?

java - 如果在 Junit 上测试失败则运行方法

java - 使用 -source 8 或更高版本来启用 lambda 表达式

java - 如果服务器在写入 OutputStream 时关闭,SSLSocket 客户端不会抛出异常

java - 帮助编写 REGEX

java - JUnit:确保测试方法中的失败在 @After 方法中的失败之前显示

java - 使用 Maven 生成 JAR

java - 凯撒密码 - 我哪里出错了?

java - 如何对我的数据库内容进行单元测试?

java - Ant 和 Junit 测试 java.lang.ClassNotFoundException