java - 模拟 Mockito 中我们无法显式分配的内容

标签 java junit4 mockito

我有一段这样的代码:

    class Lekcja {
        Calendar _date;
        public Lekcja() {
            _date = Calendar.getInstance();
        }
        public Calendar getDate() {
            return _date;
        }
    }

我想使用 JUnit4 和 Mockito 来测试它,而不是使用真正的 Calendar 对象,我想在那里放置一个模拟对象。你能告诉我该怎么做吗?

最佳答案

模拟值对象很少是一个好主意。你应该模拟行为,而不是数据。我想您真正想要实现的是能够在测试中使用任意日期(这是一个好主意)。

在这种情况下我成功使用的模式是 fake system clock (该网站的示例):

public interface TimeSource {
  long currentTimeMillis();
} 

还有两个实现,真实的:

public final class RealSource implements TimeSource {

  public long currentTimeMillis() {
    return System.currentTimeMillis();
  }

}

和假的测试:

public final class FakeSource implements TimeSource {

  public long currentTimeMillis() {
    return //...whatever you want
  }

}

我发现在辅助方法中将 currentTimeMillis() 设为静态并使用指向当前 TimeSourcestatic 字段很方便。

最后,更简单的方法是直接传递日期:

class Lekcja {
    Calendar _date;
    public Lekcja(Calendar date) {
        this._date = date;
    }
    //...
}

另请参阅

关于java - 模拟 Mockito 中我们无法显式分配的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846269/

相关文章:

java - JSF 2.0 如何从资源文件夹链接 CSS

java - 如何从 Azure key 保管库获取 Azure 存储帐户访问 key

java - 使用 lombok @RequiredArgsConstructor(onConstructor = @__(@Autowired)) 时,Mockito when().thenReturn() 的行为不符合预期

java - 为什么我们要抛出异常并使用junit 4 +mockito断言它抛出异常

java - 使用 Mockito 模拟由 spring 应用程序上下文创建的本地对象

java - 如何为 Spring Boot 服务器初始化程序编写 Mockito 测试

java - 将文件从 Gradle 父目录加载到 Java 测试中

java - Eclipse RCP 中的 XML 验证

java - JUnit 测试预期异常的正确方法

java - 具有多个接受答案的 JUnit 测试