2013-06-04 40 views
1

我想在src/test/java的測試工具中使用我的src/main/resources目錄中的applicationContext.xml。我如何加載它?我曾嘗試過:maven spring測試應用程序上下文

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="classpath:applicationContext.xml") 
public class TestService { 
... 
} 

但是得到一個文件找不到錯誤。我正在使用Maven和Spring。謝謝。

回答

3

試試這個(注意星號):

@ContextConfiguration("classpath*:applicationContext.xml") 
+1

'classpath *'搜索類路徑中的所有條目。這將從src/main/resources中包含'applicationContext.xml'的目錄。它還會在classpath上搜索jar。 –

+0

非常好,乾淨的解決方案。 – bretter

0

將src文件夾添加到測試工具的類路徑中。如果它在Eclipse中,我認爲你可以從項目屬性中完成。您可能必須將其更改爲classpath:**/applicationContext.xml。

2

Maven測試類路徑使用target/test-classes中的文件。該文件夾包含src/test/java的Java類和src/test/resources的資源。

要走的路是創建一個測試特定的應用程序上下文並將其存儲在src/main/resources下。

您可以嘗試直接使用file:來引用該文件,即類似於file:src/main/resources/applicationContext.xml但對我來說這是一個醜陋的黑客。

另外,在測試執行之前,您當然可以使用Maven resources plugin複製applicationContext.xml

+0

我想測試它將運行的確切applicationContext.xml。對我來說,它驗證上下文文件。 – bretter

+1

這很好,但你應該用集成測試來做,而不是用單元測試。 –

+0

嗯,你讓我現在思考。單元測試與集成測試。你知道我在哪裏可以閱讀更多關於這些?謝謝。 – bretter

1

這裏是我如何做到這一點,它可能是也可能不是最適合你的方式。最主要的是它在Eclipse和Maven的:

  • 保持每個項目的每個applicationContext-xxx.xml文件的一份副本。切勿複製並粘貼它們或其內容,否則會造成維護噩夢。

  • 外部化所有環境設置屬性文件(例如database-prod.propertiesdatabase-test.properties)並將它們放置在分別src/main/resourcessrc/test/resources。該行添加到您的應用程序上下文:

    < context:property-placeholder location="classpath:**/*.properties"/ >

  • 創建所有測試類的超類,並與上下文的配置將其標註爲:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) 
@Ignore 
public class SpringEnabledTest { 

    // Inheritable logger 
    protected Logger logger = LoggerFactory.getLogger(this.getClass()); 

} 
  • <additionalClasspathElements>到你的maven-surefire-plugin配置,以確保surefire拿起appContext和正確的屬性文件。我創建了一個示例here

  • 將應用上下文文件的位置和src/test/resources添加到您的Eclipse類路徑中,以便您可以在Eclipse中執行單元測試。

  • 永遠不要將src/main/resources添加到您的Eclipse類路徑中,它只是Maven打包其他源文件的方便之處,它不應該影響Eclipse。我經常把這個目錄留空,並在src/文件夾之外創建其他文件夾(例如env/DEV,env/UAT和env/PROD),並將參數傳遞給構建服務器,並讓它知道需要從哪個文件夾將文件複製到src/main/resources

相關問題