有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Spock在LocalDate中模拟静态方法?

我想模仿LocalDate.now()每次都在同一个日期返回

为此,我尝试了两种不同的选择:

第一:LocalDate.now() >> LocalDate.of(2020, 05, 07)

第二:

def today = GroovyMock(LocalDate) {
                  getYear() >> 2020
                  getMonth() >> Month.APRIL
                  getDayOfMonth() >> 24
                  getDayOfWeek() >> DayOfWeek.FRIDAY
                }
    LocalDate.now(timeZone) >> today

但是它对我没有帮助,LocalDate.now()在调用代码时仍然返回当前日期。我怎样才能达到这个目标。现在()每次都把模拟日期还给我


共 (1) 个答案

  1. # 1 楼答案

    不要这样做。Clock类的存在正是因为这个原因。在测试的类中,添加一个带有setter的属性:

    private Clock clock = Clock.systemUTC();
    

    使用

    LocalDate.now(clock)
    

    在测试用例中,用测试时钟替换默认的“真实时钟”:

    subject.clock = Clock.fixed(specificInstant, UTC)