【问题标题】:Java code coverage from MATLAB来自 MATLAB 的 Java 代码覆盖率
【发布时间】:2013-06-04 03:09:52
【问题描述】:

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

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

【问题讨论】:

    标签: java matlab code-coverage jacoco eclemma


    【解决方案1】:

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

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

    如果您将 Java 类放在 Matlab 的静态 Java 类路径上,而不是动态类,它们将通过常规 J​​ava 系统类加载器而不是自定义 Matlab 类加载器加载,并且应该可用于常规 Java 代码覆盖工具。这些自定义 Matlab 类加载器仅适用于“动态”Matlab Java 类路径上的类。您可以通过在 pref 或启动目录中提供自定义 javaclasspath.txt 文件或使用 ClassPath hacker 工具来完成此操作。 (有关详细信息,请参阅 "Bringing Java Classes into Matlab Workspace",以及 this other question about static vs dynamic Java classpath manipulation。)

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

    【讨论】:

    • 我将那些“语法+拼写”编辑回滚到我的答案中。你是对的,这里的“进入”可能比“进入”更好。但是“启动”是 Matlab 的拼写方式,而不是“启动”。在“选项”之前添加的“,”是错误的。将“and”改为“they”是错误的;这使它成为一个连续的句子,你至少需要一个分号。其余的变化是我更喜欢我原来的声音的风格和格式问题。我把“成”改成。
    • 我已经使用反射获得了 MATLAB 类加载器,但我认为没有任何方法可以检测任意类加载器。我已经尝试过 javaagent hack,但我没有尝试将代码放在静态类路径上,所以有机会我会尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2012-06-30
    • 1970-01-01
    • 2012-02-28
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多