0

プログラムからコンパイラーを呼び出すために Java が提供するインターフェースを使用しています。

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);

Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjectsFromStrings(Arrays.asList("MyClass.java"));

compiler.getTask(null, fileManager, null, null, null, compilationUnits).call();

fileManager.close();

すべてが正常に機能していますが、私ができるようにしたいのは、コンパイルしているプロジェクトに変数を渡し、結果を比較して、それらが期待どおりかどうかを確認することです。プログラムは正しく動作していません。クラスをテストするためにJUnitがどのように機能するかのようなものです。JavaCompiler インターフェースに、変数を渡してから読み取ることができるメソッドはありますか... System.in()andのようなものSystem.out()ですか?

4

1 に答える 1

0

(Java) プログラムの実行は、コンパイルとはあまり関係ありません。コンパイルされたクラスを動的にロードして (新しいスレッドなどで) 実行するか、 を使用しProcessBuilderて新しい VM を開始し、基本的に " java -cp /class/path my.compiled.MainClass ..." のようなコマンド ラインを作成します。テスト中のプログラムが を介してプログラムを誤って終了させることができないため、後者がおそらく好まれますSystem.exit()

もちろん、さらに優れた解決策があります。JUnit テストをプログラムで生成して (そして JUnit を呼び出して) みませんか?

于 2012-07-20T11:07:13.967 に答える