【发布时间】:2017-03-21 06:24:53
【问题描述】:
我有一个简单的 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 时,我收到一个错误“创建名为 'dbServices' 的 bean 时出错:自动装配依赖项的注入失败;”
我在这里做错了什么?我正在使用 spring boot 1.3.5 并且不能使用 @SpringBootTest 注释,因为它从 1.4 开始可用。任何帮助将不胜感激。
编辑: 由于 DbService 类又引用存储库类(userRepositoty、customerRepository 等),我尝试在测试上下文文件中也为这些存储库定义 bean。但是,我在 DbService 类(在 Main 中)中注入的存储库是接口,Spring Boot 框架会在运行时自动为我解析实际的实现。我不确定如何在测试环境中执行此操作。
【问题讨论】:
-
@Maciej,感谢您的回答,但这是我目前的问题。我在定义为接口的 Main autowires 存储库中的“DbService”。在运行时,Spring/Spring Boot 会自动从我的项目依赖项中为我提供这些接口的实现。我试图在我的测试类“MyTestRoot”中注入“DbService”,但我不知道如何告诉 spring 在运行单元测试时获取存储库的具体实现。它抛出一个错误:
code创建名为“dbServices”的 bean 时出错:注入自动装配的依赖项失败code -
用你的测试类更新问题。我想你可能错过了那里的一些东西。