2

できれば EclEmma/jacoco を使用して、MATLAB から実行される Java コードのコード カバレッジを測定したいと考えています。残念ながら、MATLAB には独自のカスタム クラス ローダーがあり、スレッド コンテキスト クラス ローダーを使用しないため、オンザフライ カバレッジ計測を実行する明確な方法はありません。jacoco を使用して jar のオフライン インストルメンテーションを使用しようとしましたが、得られたのは空のデータ ファイルだけでした。

MATLAB から実行したときの Java コード カバレッジの測定に成功した人はいますか? もしそうなら、どのように測定しましたか?

4

1 に答える 1

3

私は実際に行ったことはありませんが、オンザフライの計測は Matlab IDE と JaCoCo で実行できるように思えます。

EclEmma は、特に Eclipse から何かを実行するためのものです。Matlab の場合、オンライン分析でも JaCoCo を単独で使用したい場合があります。Java Agentを使用することで、Matlab を組み込みの JVM にロードすることができます。これには、JaCoCo にロードjava.optsするオプションを含むカスタム ファイルを起動ディレクトリに指定します。リンク先のページで説明されています。-javaagent:...

動的なものではなく、Matlab の静的 Java クラスパスに Java クラスを貼り付けると、それらはカスタム Matlab の代わりに通常の Java システム クラス ローダーを介してロードされ、通常の Java コード カバレッジ ツールで利用できるはずです。これらのカスタム Matlab クラスローダーは、「動的な」Matlab Java クラスパス上のクラス専用です。これを行うには、設定javaclasspath.txtディレクトリまたは起動ディレクトリにカスタム ファイルを指定するか、ClassPath ハッカーツールを使用します。(詳細については、 「Java クラスを Matlab ワークスペースに取り込む」と、静的 vs 動的 Java クラスパス操作に関するこの他の質問を参照してください。)

また、JaCoCo が JVM にフックする方法によっては、おそらくカスタム Matlab クラスローダーを指すこともできます。これらは URL クラスローダーであり、Matlab セッション内から Java リフレクションを使用してそれらのオブジェクトを取得できます。JaCoCo ドキュメント (「ミッション」内) は、通常の呼び出しの代わりに JaCoCo API を使用すると、カスタム クラス ローダーを操作できるようになることを示唆しているようです。

于 2013-06-08T02:38:01.663 に答える