如何模拟当前日期?

gst*_*low 2 java unit-testing date mockito powermockito

我的代码中有一个方法可以验证当前是否有业务.它检查数据库日历.

方法看起来像这样:

public boolean iBusinessDayToday() {
      LocalDate today = LocalDate.now();
      //logic with today
}
Run Code Online (Sandbox Code Playgroud)

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

我希望单位测试不依赖于工作日.

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

ass*_*ias 6

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

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

@VisibleForTesting
boolean iBusinessDayToday(Clock clock) {
      LocalDate today = LocalDate.now(clock);
      //logic with today
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以测试第二种方法并传递固定时钟 - 无需使用模拟框架.

  • 将`Clock`作为类的成员,传递给它的构造函数可能会更好.或者将方法更改为`isBusinessDay(LocalDate day)`.问题是什么类负责定义"今天"?这是应该拥有`Clock`的班级. (2认同)