2

我想测量从 MATLAB 运行的 Java 代码的代码覆盖率,最好使用 EclEmma/jacoco。不幸的是,MATLAB 有自己的自定义类加载器,并且不使用线程上下文类加载器,因此没有明显的方法可以让它进行动态覆盖检测。我曾尝试使用 jacoco 对我的 jar 进行离线检测,但我得到的只是一个空数据文件。

有没有人在从 MATLAB 运行时成功测量了 Java 代码覆盖率,如果是,你是怎么做到的?

4

1 回答 1

3

我实际上并没有这样做,但这听起来像使用 Matlab IDE 和 JaCoCo 应该可以实现即时检测。

EclEmma 用于专门从 Eclipse 运行东西;对于 Matlab,您可能想单独使用 JaCoCo,甚至用于在线分析。也许通过使用它的Java Agent,您可以通过java.opts在您的启动目录中提供一个自定义文件来让 Matlab 加载到其嵌入式 JVM 中,该文件包括-javaagent:...在 JaCoCo 中加载的选项,如该链接页面中所述。

如果您将 Java 类放在 Matlab 的静态 Java 类路径上,而不是动态类,它们将通过常规 J​​ava 系统类加载器而不是自定义 Matlab 加载器加载,并且应该可用于常规 Java 代码覆盖工具。这些自定义 Matlab 类加载器仅适用于“动态”Matlab Java 类路径上的类。您可以通过javaclasspath.txt在您的 pref 或启动目录中提供自定义文件或使用ClassPath 黑客工具来做到这一点。(有关一些详细信息,请参阅“将 Java 类引入 Matlab 工作区” ,以及有关静态与动态 Java 类路径操作的其他问题。)

根据 JaCoCo 与 JVM 的挂钩方式,您也可以将其指向自定义的 Matlab 类加载器——它们是 URL 类加载器,您可以在 Matlab 会话中使用 Java 反射获取它们的对象。JaCoCo 文档(在“Mission”中)似乎建议使用 JaCoCo API,而不是正常调用,可以让您使用自定义类加载器。

于 2013-06-08T02:38:01.663 回答