2012-12-19 15 views
1

我可能在思考這個錯誤,但這裏是我要對付的:規範化Spring資源以用於JUnit&war?

我注入春天的資源對象到我的應用程序,讓我安全證書的位置,例如:<property name="certificateResource" value="SomeCert.p12" />其中certificateResource是類型org.springframework.core.io.Resource

在JUnit下運行資源是一個類路徑資源,一切都很好。當在Tomcat下作爲戰爭部署時,資源位於Servlet上下文中,並且需要WEB-INF/classes/作爲證書前綴。

我試過一些資源前綴和通配符組合,但不能用滿足上下文的單個字符串來獲得。到目前爲止,「解決方案」是覆蓋src/test/resources/test-applicationContext.xm中的bean定義,但這意味着將字符串保留在兩個位置。

任何指針更好的解決方案,將不勝感激,謝謝。

+0

你試過什麼前綴? – abalogh

+0

classpath:和文件: –

回答

2

我試圖做一個小的但描述性的應用程序使用spring-test和spring-webmvc並使用xml configs中引用的資源,而這些xml被生產和測試彈簧配置重用。以下是我收到:github.com/isopov/spring-resource-test

中心從測試配置的prodcution XML配置的參考:

<import resource="file:src/main/webapp/WEB-INF/applicationContext.xml" /> 

,也可以不從其他導入一個XML,但給每個測試幾個CONFIGS:

@ContextConfiguration(locations = { "classpath:test-applicationContext.xml", 
         "file:src/main/webapp/WEB-INF/applicationContext.xml" }) 

本身駐留在src/main/resources(我以爲你正在使用Maven,或從「標準目錄佈局」派生出來的)的資源,所以它們總是與"classpath:hello.txt" F代替從任何彈簧配置。

我使用maven build測試了這個,作爲web應用程序並在Eclipse中運行UT。

+0

Ivan如果我正確地關注了你,這幾乎就是我所擁有的,當我運行JUnit時,這是一個覆蓋位置的test-appliationContext.xml。我正在尋找的是一種在單個上下文文件中只定義一次位置的方法,並使它們作爲類路徑資源或Servlet上下文資源工作。 –

+1

請再次看看 - 我在「src/main/webapp/WEB-INF/applicationContext.xml」文件中只有一次指定資源的路徑。我描述的兩種可能性是將該文件導入測試環境。再次 - 只能使用一種方式,而不能一次使用。 如果我以某種方式誤解了這種情況 - 請幫助澄清一下。 –