6

test-mule-flow.xmlフォルダーの下に名前が付けられたファイルがありsrc/main/app、単体テストを追加しました。

MuleFlowTest extends FunctionalTestCase
@Override
public String getConfigResources() {
    return "src/main/app/test-mule-flow.xml";
}

@Test
public void test......

実際、これらのテストは Eclipse(Mule Studio) および Maven ビルドで実行すると正しく実行されますが、残念ながらこれらのテストは Intellij IDEA バージョン 12 では失敗します。

これは が原因だと思いますclassloader。IDEA では、ソース ファイルはtarget/classesフォルダに格納されており、テスト クラスは に格納されていますtarget/test-classes。これが原因かもしれませんが、どうすれば構成できますか? そして、Mavenの方法でそれがより良いので、手動でアイデアを移動する設定をしたくありません。

ありがとう。

4

3 に答える 3

6

相対パスが指定されており、その場所からファイルが実際にどのように読み取られるかについての詳細は提供されていません。

クラスパスから読み取られる場合は、ファイルが含まれていることを確認する必要があります。src\main\resourcesMaven には、リソースをorに入れる規則がありsrc\test\resourcesます。通常、Maven 対応の IDE は、これらの場所を自動的にクラスパスに追加します。何らかの理由でファイルを保持できない場合、resourcesまたはクラスパスに含まれる他の場所にある場合は、IDEA でプロジェクトのソース ディレクトリを手動で構成できます。

ファイルがファイルシステムから読み取られる場合、IDEA の対応する実行/デバッグ構成で作業ディレクトリとして設定したものを確認する必要があります。

于 2013-05-20T06:39:34.323 に答える
6

相対ファイル パスを使用してファイルをロードしているようです。したがって、実際の結果は、テストを実行する JVM が開始されたディレクトリ (「現在の」ディレクトリ) によって異なります。

これは一般的に悪い考えです。ファイルがアプリケーションにバンドルされることになっている場合は、それを src/main/resources に保存し、クラス ローダーを使用してロードします。

InputStream in = MuleFlowTest.class.getResourceAsStream("/test-mule-flow.xml"));

テストでのみ使用されるファイルの場合は、src/test/resources に保存し、クラス ローダーを使用してロードします (上記と同じ)。

本当にファイルとしてロードする必要がある場合は、現在のディレクトリが常に正しいディレクトリであることを確認するか、絶対パスを作成するために使用するベース ディレクトリをコードに伝えるシステム プロパティを渡します。

于 2013-05-20T06:34:21.167 に答える
3

Maven は、クラスパスに次の 4 つのフォルダーを使用します。

  • src/main/java - ターゲット/クラスの出力
  • src/main/resources - ターゲット/クラスの出力
  • src/test/java - target/test-classes の出力
  • src/test/resources - target/test-classes の出力

テストに他のフォルダーを使用する場合 (そして、それには適切な理由があります)、http://maven.apache.org/plugins/maven-resources- で説明されているように、maven リソース プラグインに対して明示的に指定する必要があります。 plugin/examples/resource-directory.html

また、テストではsrcフォルダーのファイルを使用するのではなく、JVM のクラスパスに既にあるターゲットからファイルを使用する必要があります (「ターゲット」も指定しないでください。ファイル名を使用するだけです)。

于 2013-05-20T08:13:37.280 に答える