2016-11-07 108 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類。我所有的測試類都擴展了這個基類,我很樂意去測試。

希望這有助於某人。並感謝托馬斯烏里格的職位。