@Configuration
public class MyBeanConfig {
@Bean
public String configPath() {
return "../production/environment/path";
}
}
我有一个用@TestConfiguration
修饰的类,它应该重写这个bean
:
@TestConfiguration
public class MyTestConfiguration {
@Bean
@Primary
public String configPath() {
return "/test/environment/path";
}
}
configPath
bean用于设置外部文件的路径,该文件包含在启动期间必须读取的注册代码。它用于@component
类中:
@Component
public class MyParsingComponent {
private String CONFIG_PATH;
@Autowired
public void setCONFIG_PATH(String configPath) {
this.CONFIG_PATH = configPath;
}
}
在尝试调试时,我在每个方法以及test config类的构造函数中设置了一个断点。@TestConfiguration
的构造函数断点被命中,因此我知道我的测试配置类实例化了,但是该类的ConfigPath
方法从未被命中。相反,正常的@configuration
类的configPath
方法被点击,MyParsingComponent
中的@autowired
字符串
总是../production/environment/path
而不是预期的/test/environment/path
。
不知道为什么会这样。任何想法都将不胜感激。
正如Spring Boot reference手册的Detecting Test Configuration一节所述,在用@TestConfiguration
注释的顶级类中配置的任何bean都不会通过组件扫描获得。因此,必须显式注册@TestConfiguration
类。
您可以通过测试类的@import(MyTestConfiguration.class)
或@contextConfiguration(classes=MyTestConfiguration.class)
来完成此操作。
另一方面,如果用@TestConfiguration
注释的类是测试类中的静态
嵌套类,那么它将自动注册。
最后是MockRestTemplateConfiguration
应用程序类文件: 集成测试:
我有一些集成测试是这样的: 和下面这样的测试: 我希望能够抵消时钟bean在一天的不同时间运行一些测试。我该怎么做? 但那里什么都没发生。我需要@import什么吗?我需要自动连线吗? 谢谢!
与@mockbean和@spybean一样,有没有类似于@fakebean/@dummybean的东西? 其思想是,该实例是100%真实的(具有预期的生产内部状态),并且它覆盖(或者添加bean,以防在配置中没有声明)上下文中的bean。理想情况下,您不需要创建TestConfiguration类并将其设置为Primary,因为这样可以在每个测试的基础上控制假冒,只有在需要时才可以。否则它使用主的
已删除MyTestConfig.class,但问题仍然相同。即使我使用@SpringBootTest(classes={Application.Class,MyProblematicServiceImpl.Class}),它仍然在自动连线的地方返回模拟对象。MyProblematicServiceImpl是用@Service注释的空类。