2016-11-07 109 views
0

我有一个简单的Spring引导应用程序结构如下春季启动应用程序的测试策略建议

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 id="dbService" class="com.path.to.class.in.dependency"/> 

豆当我在我的测试类的自动装配dbService,我得到一个错误“错误与名制作豆‘dbServices’:自动装配Autowired依赖注入失败;”

我在做什么错在这里?我使用的是spring boot 1.3.5,不能使用@SpringBootTest注释,因为它可以从1.4开始使用。任何帮助都感激不尽。

编辑: 由于依次DbService类是指仓库类(userRepositoty,customerRepository等等),我试图在测试方面的文件也定义豆的仓库。但是,我在DbService类(Main)中注入的存储库是接口,而Spring Boot框架会在运行时自动解析我的实际实现。我不确定如何在测试环境中执行此操作。

+0

@Maciej,谢谢你的回答,但这是我目前的问题。我的主要自动装载存储库中的“DbService”被定义为接口。在运行时,Spring/Spring Boot自动为我提供了我的项目依赖关系中的那些接口的实现。我试图在我的测试类“MyTestRoot”中注入“DbService”,我无法知道如何告诉spring在运行单元测试时获取存储库的具体实现。它会抛出一个错误:'code'创建名为'dbServices'的bean时出错:注入自动装载的依赖关系失败'代码' –

+0

更新您的测试类的问题。我想你可能错过了那里的一些东西。 –

回答

1

Spring Boot不会自动从XML文件导入bean。在其中一个配置类上使用@ImportResource批注可以从XML文件创建Bean。

顺便说一句,为什么你在XML文件中创建这些bean?为他们使用@Configuration类,并保持简单。

此外,当您使用@SpringBootApplication你并不需要:

  • @EnableAutoConfiguration
  • @EnableComponentScan

他们是多余的。见@SpringBootApplication来源,以找出究竟说明它拉

0

下面的文章中,我找到了适合我的工作。http://tuhrig.de/inject-mocks-with-springs-contextconfiguration/

我的问题是我想要的DbService在我的测试。但是DbService依赖于来自外部程序包依赖关系的其他bean,它们在运行时由spring解决。我设置了一个ServiceMockProvider类,该类返回DbService使用的所有自动布线Bean的模拟。我创建了一个用@ContextConfiguration注释的基类测试类,并在classes属性中提供了DbService类和ServiceMockProvider类。我所有的测试类都扩展了这个基类,我很乐意去测试。

希望这有助于某人。并感谢托马斯乌里格的职位。