【问题标题】:How to mock current date?如何模拟当前日期?
【发布时间】:2016-03-03 14:11:30
【问题描述】:

我的代码中有一个方法可以验证当前日期是否正常。它为此检查数据库日历。

方法如下:

public boolean iBusinessDayToday() {
      LocalDate today = LocalDate.now();
      //logic with today
}

我需要为此编写单元测试。

我希望单元测试不依赖于工作日。

您认为使用 powerMockito 模拟 LocalDate.now() 需要这个问题吗?

【问题讨论】:

  • 你能改一下代码吗,例如在iBusinessDayToday()?
  • 正如LocalDate.now() 的Javadoc 警告:Using this method will prevent the ability to use an alternate clock for testing because the clock is hard-coded.

标签: java unit-testing date mockito powermockito


【解决方案1】:

另一种方法是将时钟传递给方法:

public boolean iBusinessDayToday() {
  return iBusinessDayToday(Clock.systemDefaultZone());
}

@VisibleForTesting
boolean iBusinessDayToday(Clock clock) {
      LocalDate today = LocalDate.now(clock);
      //logic with today
}

现在您可以测试第二种方法并传递a fixed clock - 无需使用模拟框架。

【讨论】:

  • 最好让Clock 成为类的成员,并传递给它的构造函数。或者将方法更改为isBusinessDay(LocalDate day)。问题是哪个类负责定义“今天”?那是应该拥有Clock 的类。
猜你喜欢
  • 2011-05-25
  • 2019-12-31
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多