我想测量从 MATLAB 运行的 Java 代码的代码覆盖率,最好使用 EclEmma/jacoco。不幸的是,MATLAB 有自己的自定义类加载器,并且不使用线程上下文类加载器,因此没有明显的方法可以让它进行动态覆盖检测。我曾尝试使用 jacoco 对我的 jar 进行离线检测,但我得到的只是一个空数据文件。
有没有人在从 MATLAB 运行时成功测量了 Java 代码覆盖率,如果是,你是怎么做到的?
我想测量从 MATLAB 运行的 Java 代码的代码覆盖率,最好使用 EclEmma/jacoco。不幸的是,MATLAB 有自己的自定义类加载器,并且不使用线程上下文类加载器,因此没有明显的方法可以让它进行动态覆盖检测。我曾尝试使用 jacoco 对我的 jar 进行离线检测,但我得到的只是一个空数据文件。
有没有人在从 MATLAB 运行时成功测量了 Java 代码覆盖率,如果是,你是怎么做到的?
我实际上并没有这样做,但这听起来像使用 Matlab IDE 和 JaCoCo 应该可以实现即时检测。
EclEmma 用于专门从 Eclipse 运行东西;对于 Matlab,您可能想单独使用 JaCoCo,甚至用于在线分析。也许通过使用它的Java Agent,您可以通过java.opts
在您的启动目录中提供一个自定义文件来让 Matlab 加载到其嵌入式 JVM 中,该文件包括-javaagent:...
在 JaCoCo 中加载的选项,如该链接页面中所述。
如果您将 Java 类放在 Matlab 的静态 Java 类路径上,而不是动态类,它们将通过常规 Java 系统类加载器而不是自定义 Matlab 加载器加载,并且应该可用于常规 Java 代码覆盖工具。这些自定义 Matlab 类加载器仅适用于“动态”Matlab Java 类路径上的类。您可以通过javaclasspath.txt
在您的 pref 或启动目录中提供自定义文件或使用ClassPath 黑客工具来做到这一点。(有关一些详细信息,请参阅“将 Java 类引入 Matlab 工作区” ,以及有关静态与动态 Java 类路径操作的其他问题。)
根据 JaCoCo 与 JVM 的挂钩方式,您也可以将其指向自定义的 Matlab 类加载器——它们是 URL 类加载器,您可以在 Matlab 会话中使用 Java 反射获取它们的对象。JaCoCo 文档(在“Mission”中)似乎建议使用 JaCoCo API,而不是正常调用,可以让您使用自定义类加载器。