【问题标题】:How to get started writing a code coverage tool? [closed]如何开始编写代码覆盖工具? [关闭]
【发布时间】:2010-09-05 08:24:37
【问题描述】:

寻找真正讨论如何在 Java 中编写代码覆盖工具的书籍或其他参考资料;一些不同的技术或技巧 - 源代码与字节码检测。

这是一种在底层生成 Java 字节码的脚本语言。

【问题讨论】:

    标签: java testing coldfusion code-coverage


    【解决方案1】:

    您的脚本语言是否生成字节码?它会生成调试元数据吗?如果是这样,字节码检测可能是要走的路。事实上,现有的工具可能会起作用(可能只需要很少的修改)。

    此类工具的典型问题是它们被编写为与 Java 一起使用并假设 class com.foo.Bar.class 对应于文件 com/foo/Bar.java。解开这个假设可能很乏味。

    EMMA 是一个 ClassLoader,它为 Java 中的代码覆盖集合执行字节码重写。编码风格有点时髦,但我建议阅读源代码以获得一些想法。

    如果您的脚本语言被解释,那么您将需要一个更高级别的类加载器(在源代码级别),该类加载器与解释器挂钩。

    【讨论】:

      【解决方案2】:

      谢谢,麦克! http://asm.objectweb.org/ 是另一个。 优秀的关于字节码检测的文档,但没有“直接”旨在编写覆盖工具 - 只是一些提示或想法。

      【讨论】:

        【解决方案3】:

        如果您说的是 ColdFusion(我假设您来自标签),那么我不确定这是否可行,但我可能在这里大错特错...

        IIRC,当 CF 编译时,它基本上编译为 CFML 的解释形式,作为普通的旧 java 源文件,然后编译到类中。因此,您可能拥有的任何工具都将适用于中间版本,而不是 CFML 本身。

        尽管如此,Adobe 现在已经有了 CF 调试器,它可以单步执行代码,所以请证明我错了 - 我喜欢 CFML 中的代码覆盖率。

        【讨论】:

        • 查看我对“轻松实现任意语言的分支覆盖”的回复。直接检测 CFML 代码然后将其编译为 Java 仍会直接为 CFML 提供测试覆盖率数据。 (我以构建测试覆盖工具为生)。
        • 这是怎么回事? ColdFusion 的 Rancho 代码覆盖率kunalsaini.blogspot.in/2012/05/…
        【解决方案4】:

        您可能还想使用 BCEL 之类的工具来分析字节码中实际存在哪些源代码行。您不想报告未涵盖空行和 cmets 之类的内容。

        【讨论】:

        • 这不是一个好主意,除非 BCEL 中的行号与 OP 的 DSL 中的行号完全匹配。如果他们不这样做,您将获得“错误”源代码行的报道。
        【解决方案5】:

        您还可以从开源代码覆盖工具中获取源代码并从中学习。

        【讨论】:

          猜你喜欢
          • 2011-03-02
          • 1970-01-01
          • 2010-09-25
          • 1970-01-01
          • 1970-01-01
          • 2010-10-05
          • 2010-09-16
          • 1970-01-01
          • 2011-03-17
          相关资源
          最近更新 更多