gpt4 book ai didi

java - 在集成测试中覆盖 spring @Configuration

转载 作者:行者123 更新时间:2023-11-30 10:02:46 24 4
gpt4 key购买 nike

我有一个像这样的 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 以在一天中的不同时间运行一些测试。我该怎么做?

注意:我看到了 several stack overflow answers与此类似,但我无法让它们工作。

根据其他回复,看来解决方案应该是这样的:

@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));
}
}
}

但是那里什么也没有发生。我需要@Import 吗?我需要@Autowired 吗?

谢谢!

最佳答案

当您使用 Spring Boot 时,您可以利用 @MockBean 注释:

@SpringBootTest(classes = MyApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public abstract class AbstractIntegrationTest {

@MockBean
private Clock clockMock;
}

然后您可以相应且唯一地对该 bean 的公共(public)方法 stub :

@Test
public void CreateSomethingThatOnlyWorksInThe Morning_ExpectCorrectResponse() {
when(clockMock.getTime()).thenReturn(..);
}

根据 @MockBean 的 javadoc:

Any existing single bean of the same type defined in the context will be replaced by the mock.

关于java - 在集成测试中覆盖 spring @Configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56637737/

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