spring boot应用程序测试策略建议

时间:2016-11-07 19:34:24

标签: unit-testing spring-boot

我有一个简单的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框架在运行时自动解析我的实际实现。我不确定在测试环境中如何做到这一点。

2 个答案:

答案 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担任该职位。