1

完了時に CSV ファイルを「書き出す」ことを含む Maven プロジェクトを作成しました。

「mock/test」レポート ファイルを生成するテスト クラスを作成しましたが、単体テストを実行するときに「mvn package」または「mvn test」コマンドを使用すると、次のエラーが発生します。

28 Jan 2012 11:17:51,499 main DEBUG main.executors.ReportsExecutor:111  - Finished processing documents in 0.0 hours
28 Jan 2012 11:17:51,516 main ERROR main.utilities.FileWriterObject:279  - writeToADelimitedFile: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory) APPEND VALUE: false
28 Jan 2012 11:17:51,517 main ERROR main.executors.ReportsExecutor:170  - java.io.FileNotFoundException: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory)
java.io.FileNotFoundException: reports/reportResults_1_28_2012_11.17.515.csv (No such file or directory)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:102)
    at java.io.FileWriter.<init>(FileWriter.java:61)
    at 

「APPEND VALUE: false」出力は、それぞれのファイル名で新しいファイルを「作成」するために、FileWriter コンストラクターの「追加」ブール値パラメーターが false であることを知らせる単なるデバッグ ステートメントであることに注意してください。

現在、本番環境では問題なく動作しています。機能していないのは私の単体テストだけです。構成していない「ルート テスト」ディレクトリはありますか?

私はMavenにかなり慣れています。どんなフィードバックでも大歓迎です!

4

2 に答える 2

1

Maven は、単体テストで使用するのに便利な「basedir」というプロパティを設定します。簡単な単体テストを作成しましたが、これは Maven と Eclipse の両方で機能します。

public class ReadAndWriteToTargetDirectoryTest extends Assert {

    public static final String TEST_STRING = "Testing";

    @Test
    public void testReadWrite() {
        File file = new File(System.getProperty("basedir", ".") + File.separator + "target", "mavenTest.txt");

        try {
            FileWriter writer = new FileWriter(file);
            System.out.println("File: " + file.getCanonicalPath());
            writer.write(TEST_STRING);
            writer.close();

            BufferedReader reader = new BufferedReader(new FileReader(file));
            String line = reader.readLine();
            reader.close();
            assertTrue(line.equals(TEST_STRING));
        } catch (IOException e) {
            fail(e.getMessage());
        }
    }
}

System.getProperty(...) を使用して「basedir」システム プロパティを取得する場合は、必ずデフォルト パラメータを「.」に設定してください。Eclipse でも単体テストを実行できるようにします。

System.getProperty("basedir", ".")
于 2012-01-31T06:13:50.270 に答える
0

コマンド「mvntest」を実行したディレクトリ以外のディレクトリに対して「相対的」なテストを実行するようにMavenに指示できないようです。

したがって、プロジェクトのルートディレクトリに対して「相対的な」ディレクトリにあるファイルに書き込もうとしている場合は、Javaクラス、つまり書き込みを行うクラスが必要です。書き込む前に、それぞれのディレクトリが存在することを確認してください。

私が最初にこれを行わなかった理由は、ant-deployment.xmlファイルに、実装に必要なディレクトリ、つまりtarget / logs、target / resourcesなどを構築させているためです。したがって、デプロイされたアプリを実行すると、この問題はありません。

私はmaven、つまり「mvn -Dbase.dir = target test」を伝えることができることを望んでいましたが、どうやら私はできません。

于 2012-02-02T19:00:23.440 に答える