spring boot:1.4.0.RC1
我遇到的问题是,如果您的应用程序中定义了一些@Bean
方法,并且您希望覆盖具有测试配置文件@Configuration
的方法{ {1}}测试配置文件中的bean永远不会被加载,除非您从应用程序中删除它们,即默认配置文件。
我不知道为什么会这么乱,肯定应该有某种配置文件首选项加载?
与使用默认值一样,除非使用特定的配置文件定义了bean,否则请改用它们。
如果您对配置文件使用@Profile("test")
注释,但如果将@Component
与@Bean注释结合使用,它似乎会有所帮助。这看起来像个黑客。
我试图摆脱使用组件扫描作为策略,因为它很难管理,而是我们为每个配置文件创建配置类,我们会有一些应用程序中应该可覆盖的默认值
任何关于春天的autowire噩梦的帮助都会有很大的帮助
答案 0 :(得分:0)
由于您使用的是1.4.0.RC1,因此对于测试方案,您可以尝试新的mocking and spying beans功能,例如:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@MockBean
private RemoteService remoteService;
@Autowired
private Reverser reverser;
@Test
public void exampleTest() {
// RemoteService has been injected into the reverser bean
given(this.remoteService.someCall()).willReturn("mock");
String reverse = reverser.reverseSomeCall();
assertThat(reverse).isEqualTo("kcom");
}
}
条件test
配置文件包含大量测试bean的配置类不是一个好主意,并且很难链接到测试用例本身。
对于除测试之外的其他情况,您可以像Spring Boot一样初始化默认和可重写的bean。在AutoConfiguration
中配置它们,@Configuration
s的优先级通常低于@ConditionalOnMissingBean
类,并使用{{1}}等条件注释进行注释。