gpt4 book ai didi

java - 如何在 Spring Boot 中注入(inject) Clock.getInstance()?

转载 作者:行者123 更新时间:2023-11-30 06:04:23 24 4
gpt4 key购买 nike

我想对一些调用 System.currentTimeMillis() 的代码进行单元测试.作为this answer指出,执行此操作的一个好方法是替换对 System.currentTimeMillis() 的调用与 Clock.getInstance().currentTimeMillis() .然后,您可以对 Clock.getInstance() 执行依赖注入(inject),例如在单元测试中用模拟替换它。

所以,我的问题是后续问题。你如何配置Spring Boot注入(inject)Clock.getInstance()在运行时?

如果可能的话,我更愿意用注释而不是 XML 来做到这一点。

此外,如果可能的话,我想以一种可以简单地使用 @Mock 的方式来做到这一点。和 @InjectMocksMockitoJUnitRunner将模拟时钟注入(inject)单元测试。

最佳答案

在你的配置类中,你可以做:

@Configuration
public class Config {
@Bean
public Clock clock() {
return Clock.fixed(...);
}
}

在你的类里面你可以@Autowire它:

public class ClockUser {

private Clock clock;

public ClockUser(Clock clock, ...) {
this.clock = clock;
}
}

(请注意,我在这里使用构造函数注入(inject),请参阅标题为基于构造函数或基于 setter 的 DI 的部分 of this articleOliver Gierke's comment(即 Spring Data 项目负责人)和 google 以获取更多信息。 )

然后您可以在另一个测试 @Configuration 类或您的 JUnit 测试中创建模拟:

@Bean
public Clock {
Clock clock = Mockito.mock(Clock.class);
.... ("when" rules)
return clock;
}

关于java - 如何在 Spring Boot 中注入(inject) Clock.getInstance()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49634941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com