java nowtime,我如何模拟java.time.LocalDate.now()

小编典典

在您的代码中,将替换LocalDate.now()为LocalDate.now(clock);。

然后Clock.systemDefaultZone(),您可以通过生产并使用固定时钟进行测试。

这是一个例子:

首先,注入Clock。如果您使用的是Spring Boot,请执行以下操作:

@Bean

public Clock clock() {

return Clock.systemDefaultZone();

}

其次,LocalDate.now(clock)输入您的代码:

@Component

public class SomeClass{

@Autowired

private Clock clock;

public LocalDate someMethod(){

return LocalDate.now(clock);

}

}

现在,在单元测试类中:

// Some fixed date to make your tests

private final static LocalDate LOCAL_DATE = LocalDate.of(1989, 01, 13);

// mock your tested class

@InjectMocks

private SomeClass someClass;

//Mock your clock bean

@Mock

private Clock clock;

//field that will contain the fixed clock

private Clock fixedClock;

@Before

public void initMocks() {

MockitoAnnotations.initMocks(this);

//tell your tests to return the specified LOCAL_DATE when calling LocalDate.now(clock)

fixedClock = Clock.fixed(LOCAL_DATE.atStartOfDay(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());

doReturn(fixedClock.instant()).when(clock).instant();

doReturn(fixedClock.getZone()).when(clock).getZone();

}

@Test

public void testSomeMethod(){

// call the method to test

LocalDate returnedLocalDate = someClass.someMethod();

//assert

assertEquals(LOCAL_DATE, returnedLocalDate);

}

2020-09-16

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值