2016-01-13 131 views
7

我正在使用Spring Boot應用程序並啓用自動配置。主應用程序文件標記爲@EnableAutoConfiguration。從JNDI查找數據源是使用java config配置的,創建數據源的類標記爲@Configuration測試時使用數據源進行彈簧啓動

我有一個測試類如下。

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(classes = Application.class) 
public class TestSomeBusiness {} 

的問題是,當我運行測試的情況下,數據源JNDI查找發生,因爲測試用例是不是一個服務器環境中運行的失敗。據我所知,類路徑中標記爲@Configuration的類已被執行,並且調用了數據源查找的原因。

現在我發現的工作是使用DriverManagerDataSource而不是JNDI查找來創建數據源,因此即使它不是服務器環境,數據源查找也不會失敗。

我的問題是:

1)如何我們一般處理的數據源(從JNDI在 春季啓動應用程序查找時)進行測試?

2)在執行測試用例時,有沒有辦法排除數據源配置類被調用?

3)我應該創建一個嵌入式服務器,以便在執行測試用例時可以完成JNDI查找嗎?

回答

6

2)有執行測試用例時排除數據源配置類被調用的方法嗎?

您可以添加application.properties配置文件到您的src/test/resources春季啓動會選擇在測試環境中的配置。我想,你在你的src/main/resources這樣有application.properties

spring.datasource.jndi-name=some_jndi 

JNDI資源將在生產環境中使用。在執行時

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

3)我應該創建一個嵌入式服務器,使JNDI查找可以 做到:對於您的測試環境可以使用,比如MySQL數據庫,通過將這些配置到您的測試application.properties測試用例 ?

正如我所說的,通過添加測試特定配置,您完全可以繞過使用JNDI進行生產的事實。

1)我們如何在春季啓動應用程序中測試數據源(從 JNDI中查找時)?

您可以使用org.springframework.mock.jndi包中的可用工具模擬JNDI資源。例如,通過使用SimpleNamingContextBuilder,您可以:

SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); 
builder.bind("jndi_name", dataSource); 
builder.activate(); 

另一種選擇是,當然,使用Non JNDI資源在測試環境中。

相關問題