【问题标题】:Code coverage of built JAR构建 JAR 的代码覆盖率
【发布时间】:2017-02-24 12:22:50
【问题描述】:

是否能够为属于我的类路径的 JAR 文件生成代码覆盖率报告?

jar 已编译并作为库添加到 Gradle 项目。

jar 的测试代码存储在项目中。

【问题讨论】:

    标签: java code-coverage jacoco


    【解决方案1】:

    是否能够生成代码覆盖率报告以添加到类路径 jar?

    应该有。不过,您并没有告诉您正在使用哪个代码覆盖率工具。从问题中的标签看来,您正在使用JaCoCo

    代码覆盖通常经历 3 个阶段:

    1. 检测:您针对已编译的类运行代码覆盖工具,这会创建类的检测版本。从概念上讲,检测类在递增计数器的每一行都注入了代码。这就是跟踪访问了哪条线路的方式。
    2. 检测类的代码执行:运行代码,计数器收集已访问的行。
    3. 报告:读取计数器收集的数据并用于生成代码覆盖率报告。在这个阶段,您需要源代码,以便代码覆盖工具可以将代码覆盖结果与实际来源相匹配。

    在您的场景中,您可以做的是解压缩您想要对其进行代码覆盖的 JAR,检测其中的类并将这些类压缩到另一个 JAR。将原始 JAR 替换为带有检测类的 JAR。

    这是一个非标准的工作流程,在 Ant/Maven 中可能不容易配置,但您可以通过编程方式进行配置,请参阅 APIAPI examples

    【讨论】:

    【解决方案2】:

    我认为您可以为自己量身定制这样的解决方案:

    1. 您进行“覆盖数据收集”
    2. export那个结果;例如导入 CSV 数据
    3. 您编写了一小段代码来获取任何 JAR 存档的所有类/包的名称
    4. 然后,您只需从使用第 3 步生成的 CSV 文件中提取这些行。

    鉴于您的评论:您似乎不明白“覆盖”在为您做什么。关键是:你启动一个JVM; JVM 运行一些代码。在此过程中,会收集有关使用哪些类/方法、采用的路径等的数据。

    换句话说:

    • 驱动 JVM 运行东西
    • 覆盖框架记下采用了哪些代码路径

    该过程中的任何内容都与特定 JAR 有关。 Coverage 只检查哪些代码正在运行。映射到“代码来自的地方是一个不同的方面。

    【讨论】:

    • 对不起,问题可能不够清楚。我可以为已编译的 jar 创建覆盖率报告吗?
    • @AndriiAbramov 是的,你可以
    • @GhostCat,谢谢,绝对赞成。但是 Toongeorges 的回答更详细,完全适用于我的情况。
    • 不客气;我实际上同意,他的回答更好;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2016-08-22
    • 2012-02-23
    • 2011-08-10
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多