我有一个简单的Spring Boot Application结构如下
src/main/java
com
+- example
+- myproject
+- Application.java
|
+- config
| +- SpringConfig.java
|
+- service
| +- DBService.java
src/main/test
com
+- example
+- myproject
+- config
| +- MyTestRoot.java
src/test/resources
applicationContext-test.xml
Application.java用
注释@SpringBootApplication
@EnableJms
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
SpringConfig.java使用@Configuration注释,并且有一个返回DBService的新实例的方法。该方法使用@Bean
进行注释@Bean
public DBService dbService() {
return new DBService();
}
DBService类具有自动装配到其中的存储库。这些存储库来自另一个项目依赖项,并提供与RDBMS / Data Store的连接。
我在applicationContext-test.xml
中定义了一个bean<bean id="dbService" class="com.path.to.class.in.dependency"/>
当我在我的测试类中自动装配dbService时,我收到一个错误&#34;错误创建名称为“dbServices”的bean:注册自动装配的依赖项失败;&#34;
我在这里做错了什么?我正在使用spring boot 1.3.5并且不能使用@SpringBootTest注释,因为它从1.4开始可用。任何帮助将不胜感激。
修改: 由于DbService类又引用了存储库类(userRepositoty,customerRepository等),因此我尝试在测试上下文文件中为这些存储库定义bean。但是,我在DbService类(在Main中)注入的存储库是接口,Spring Boot框架在运行时自动解析我的实际实现。我不确定在测试环境中如何做到这一点。
答案 0 :(得分:1)
Spring Boot不会自动从XML文件导入bean。在其中一个配置类上使用@ImportResource注释从XML文件创建bean。
顺便问一下,为什么要在XML文件中创建这些bean?只需使用@Configuration
课程,并保持简单。
此外,当您使用@SpringBootApplication
时,您不需要:
@EnableAutoConfiguration
@EnableComponentScan
他们是多余的。请参阅@SpringBootApplication
来源,了解它所带来的确切注释。
答案 1 :(得分:0)
我发现以下帖子为我工作:http://tuhrig.de/inject-mocks-with-springs-contextconfiguration/
我的问题是我想在我的测试中使用DbService。但是DbService依赖于Spring在运行时解析的外部包依赖项中的其他bean。我设置了一个ServiceMockProvider类,它返回DbService使用的所有自动装配bean的模拟。我创建了一个使用@ContextConfiguration注释的基本测试类,并在classes属性中提供了DbService类和ServiceMockProvider类。我的所有测试类都扩展了这个基类,我很乐意去测试。
希望这对某人有帮助。感谢Thomas Uhrig担任该职位。