2016-02-12 136 views
1

我在Maven和Eclipse中的測試有問題。Maven - 覆蓋測試資源文件夾

我從Eclipse中運行我的測試套件和一切運作良好,但是當我運行

mvn test 

我有一個例外,它出現時,我試圖在測試類似案例,閱讀一些文件:

final File javaFolder = new File("WEB-INF/test/file"); 

當我這樣做,我有一個空指針異常和調試我看到的路徑是

C:\Users\myUser\AppData\Local\Temp\WEB-INF\test\file 

另外,我認爲這很重要,因爲我們需要在特定的地方使用測試源,所以我重寫了我的pom中的測試目錄。我們這樣做:

<testSourceDirectory>WEB-INF/test/java</testSourceDirectory> 

所以我的問題是:爲什麼使用Maven運行測試沒有得到正確的工作目錄?我可以定義一個特定的文件夾來讀取一些文件嗎?我試過的東西像

getClass().getResource("myFile").getFile() 

但是當我打印的絕對路徑,我再次

C:\Users\myUser\AppData\Local...\myFile

編輯:我沒有機會按照約定,因爲我說的是一個大的系統,從未使用Maven,因此無法更改所有的目錄結構。不幸的是,這不是我的想法。

此外,當打印我的「user.dir來」我有:C:\Users\myUser\AppData\Local\Temp

EDIT2:我的項目路徑是另一個分區E:\work\myProject

回答

2

有你嘗試添加這對你的pom.xml

 <testResources> 
      <testResource> 
       <directory>${basedir}/src/main/WEB-INF/test/file</directory> 
      </testResource> 
      <testResource> 
       <directory>${basedir}/src/main/WEB-INF/test/java</directory> 
       <excludes> 
        <exclude>**/*.java</exclude> 
       </excludes> 
      </testResource> 
     </testResources> 

一下添加到構建部分,它讓你的testResource文件夾,並在所有測試類都是指定的位置。考慮檢查這個link,有一個例子here可以幫助你創建pom.xml。

記住有資源部分和testResource部分,你應該修改第二個指向正確的站點。

還要考慮使用final File javaFolder = new File("classpath:/WEB-INF/test/file");

+0

感謝您的回覆。這個:'C:\ Users \ Marcos \ AppData \ Local \ Temp \ classpath:\ WEB-INF \ test \ file'所以我再次出現了NPE,原因很明顯:( – MarcosTonina

+0

加入testResource目錄很可能解決了這個問題*假設*他正在使用後面提到的'getResource()'方法,順便說一句,組合是保持測試靈活性的最佳方法。當你從一個構建測試轉換到一個測試運行時,其他解決方案最終會打破(這是我最好的猜測,爲什麼他們需要在WEB-INF中) – Gus

+0

將我的測試從WEB-INF移動到另一個文件夾可能是一個選項您是否建議? – MarcosTonina

0

行家的基本原則是約定優於配置。你可能想問一個誠實的問題,爲什麼你不得不擺脫這個既定的慣例。

你嘗試 「的src /主/ web應用/ WEB-INF /測試/文件」

更新: 我想你應該在你的測試用例日誌System.getProperty( 「user.dir來」)和確保文件是相對於打印的目錄。

+0

感謝您的回覆!我沒有可能改變文件夾結構-sadly,這不是我的願望 - 另一方面,我不知道爲什麼路徑是C:\ ....而不是src/main/webapp ..所以我的測試文件被正確編譯,問題出在我的資源上。 – MarcosTonina

+0

上面更新了答案。 – JVXR

+0

當我打印user.dir時,它附帶:C:\ Users \ myUser \ AppData \ Local \ Temp – MarcosTonina

0

我覺得你的資源目錄也不同。 所以請確保你已經設置好你的資源目錄(不僅僅是你的源碼目錄)並使用getResourcesAsStream加載你的文件

+0

我沒有配置在我的POM中包含任何資源:( – MarcosTonina