java在集成测试中重写spring@Configuration
我有这样一个spring boot配置类:
@Configuration
public class ClockConfiguration {
@Bean
public Clock getSystemClock() {
return Clock.systemUTC();
}
}
我有一些集成测试,比如:
@SpringBootTest(classes = MyApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class AbstractIntegrationTest {
}
像这样的测试:
public class MiscTests extends AbstractIntegrationTest{
@Test
public void CreateSomethingThatOnlyWorksInThe Morning_ExpectCorrectResponse() {
}
我希望能够抵消时钟bean,以便在一天中的不同时间运行一些测试。我该怎么做
注意:我看到severalstack overflowanswers与此类似,但我无法让它们工作
根据其他回答,解决方案似乎应该是:
@SpringBootTest(classes = MyApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class AbstractIntegrationTest {
@Configuration
class MyTestConfiguration {
@Bean
public Clock getSystemClock() {
Clock realClock = Clock.systemDefaultZone();
return Clock.offset(realClock, Duration.ofHours(9));
}
}
}
但那里什么也没发生。我需要导入一些东西吗?我需要自动连线吗
谢谢
# 1 楼答案
在使用Spring Boot时,可以利用
@MockBean
注释:然后,您可以相应地、唯一地将该bean的公共方法存根到每个测试中:
根据
@MockBean
的javadoc: