2011-01-05 22 views
2

うまくいけばは、簡単な質問...Mavenのテスト/ resourcesディレクトリと統合テスト

私はデフォルトのディレクトリ構造が含まれている統合テストモジュールを持っている必要があります:私のリソース内で次に

src 
|-main 
|-test 
    |-java 
    |-resources 

ディレクトリI xxxx.xmlとxxxx.xsdファイルを持っている、と私は私のテストの一環として、これらのファイルをロードする必要があります。

@Test 
public void should_do_some_stuff_with_xml_and_xsd() // not actual test name 
{ 
    File xmlFile = new File("xxxx.xml"); 
    File xsdFile = new File("xxxx.xsd"); 
    ... 
} 

これは、ファイルをロードしようとして失敗し続け、今私はトンそれがダウンしていたと推定しますoプロジェクトのルートなどから相対パスを得る必要がある。私はIDEに外部で実行するためにこのテストが必要なので、ビルドサーバー上でテストを実行することができます。

私の質問はどのようにこれらのファイルをターゲットにしますか?

答えて

11

クラスパスメカニズムはファイルに対して機能しません。相対ファイルパスは、クラスパス要素からではなく、カレントディレクトリから解決されます。

だからあなたはただしかし、非常にクリーンソリューションは、入力ストリームの代わりに、ファイルを操作することであろう

File xmlFile = new File("target/test-classes/xxxx.xml"); 
File xsdFile = new File("target/test-classes/xxxx.xsd"); 

を行うことができます。 FileのパラメータをサポートするほとんどすべてのライブラリもInputStreamのパラメータをサポートしています。手動で任意のパスを指定せずにClassLoader魔法を使うことができ、その方法:

ClassLoader cldr = Thread.currentThread().getContextClassLoader(); 
InputStream xmlStream = cldr.getResourceAsStream("xxxx.xml"); 
InputStream xsdStream = cldr.getResourceAsStream("xxxx.xsd"); 

参考:

+0

入力ストリームの代わりにファイルが本当に必要な場合は、次のようにすることができます: 'File xmlFile = new File(Thread.currentThread()。getContextClassLoader()。getResource(" xxxx.xml "));' – paperhat

関連する問題