mka*_*erg 2 java spring unit-testing spring-boot
我想对一些调用的代码进行单元测试System.currentTimeMillis()。由于这个答案所指出的,要做到这一点的好方法是调用替换到System.currentTimeMillis()用Clock.getInstance().currentTimeMillis()。然后,您可以对进行依赖注入Clock.getInstance(),例如在单元测试中将其替换为模拟。
因此,我的问题是对此的后续行动。如何配置Spring BootClock.getInstance()在运行时注入?
如果可能的话,我宁愿使用批注而不是XML来做到这一点。
另外,如果可能的话,我愿意做这样的方式,我可以简单地使用@Mock,并@InjectMocks与MockitoJUnitRunner注入一个模拟时钟到一个单元测试。
在配置类中,您可以执行以下操作:
@Configuration
public class Config {
@Bean
public Clock {
return Clock.fixed(...);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的课程中,您可以@Autowire:
public class ClockUser {
private Clock clock;
public ClockUser(Clock clock, ...) {
this.clock = clock;
}
}
Run Code Online (Sandbox Code Playgroud)
(注意,我在这里使用构造函数注入,请参阅本文标题为基于构造函数或基于setter的DI的 部分,Oliver Gierke的评论(即Spring Data项目的负责人)和google,以获取更多信息。)
然后,您可以在另一个测试@Configuration类或测试中创建模拟对象JUnit:
@Bean
public Clock {
Clock clock = Mockito.mock(Clock.class);
.... ("when" rules)
return clock;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |