我有一个 Spring 组件,它需要一个 Clock 作为依赖项:
@Component
public class MyClass {
private final Clock clock;
@Autowired
public MyClass(Clock clock){
this.clock = clock
}
}
对于我的大多数测试,我有一个模拟时钟,它被注释为 @Bean
并被正确注入(inject)。然而,对于我的一些测试,我需要使用不同的模拟时钟。我如何为这些测试使用不同的模拟?
public class MyClassTest {
@Autowired
private MyClass myClass;
@Test
public void test1(){
// use the standard mock clock
}
@Test
public void test2(){
// inject clock.fixed(Instant.parse("2018-01-01T00:00:00Z"), UTC);
}
@Test
public void test3(){
// inject clock.fixed(Instant.parse("2019-12-12T23:59:59Z"), UTC);
}
}
因此,在这个示例中,我想覆盖 test2
和 test3
中的模拟时钟。
最佳答案
您可以使用ReflectionTestUtils注入(inject)各种模拟。它就是为此目的而设计的。
@Test
public void test2(){
// inject clock.fixed(Instant.parse("2018-01-01T00:00:00Z"), UTC);
ReflectionTestUtils.setField(myClass, "clock", mockClock);
}
关于java - 如何在某些 Spring 测试中注入(inject)类的特定实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49795357/