【问题标题】:Testing Lombok annotations with Junit使用 Junit 测试 Lombok 注释
【发布时间】:2016-09-22 16:12:21
【问题描述】:

我有一个简单的 Java 程序,它使用 Lombok 注释 - @Builder。 我正在使用 junit 测试我的代码,每次我运行单元测试时,我的覆盖率总是低于 50%,尽管我正在测试我的整个代码。

我查看了 junit 生成的代码覆盖率,发现是 Lombok 注释导致覆盖率下降。

我看到了类似的东西:

toString() - 0%
build() - 0%
MyMethod.MyMethodBuilder() - 0%

如何为@Builder 注释测试这些方法?或者提高覆盖率的唯一方法是将那些从测试覆盖率中排除?

【问题讨论】:

  • 我宁愿走另一条路,从覆盖率报告中排除生成的代码。你在那里用什么?
  • JaCoCo 代码覆盖率
  • 看起来这只会部分起作用:stackoverflow.com/questions/29520912/…
  • 这绝对是一个很好的解决方案,但令我困惑的是,除了将其排除在覆盖范围之外,没有其他解决方案。
  • 添加一个命中所有生成代码的集成测试。

标签: java junit lombok


【解决方案1】:

从 JaCoCo v0.8.0 开始,您应该在项目的根目录下创建 lombok.config 文件并添加以下内容:

lombok.addLombokGeneratedAnnotation = true

这将为 Lombok 生成的文件添加 @Generated 注释,JaCoCo 将知道应该忽略此类代码的代码覆盖率。

Credits to original author here

【讨论】:

    【解决方案2】:

    创建 lombok.config 文件并在下面添加文本:

    config.stopBubbling = true
    lombok.addLombokGeneratedAnnotation = true
    

    config.stopBubbling = true 告诉 Lombok 这是根目录,它不应该在父目录中搜索更多配置文件(您可以在不同目录中拥有多个 lombok 配置文件/包)。

    lombok.addLombokGeneratedAnnotation = true 告诉 Lombok 将 @lombok.Generated 注释添加到所有生成的方法中。

    【讨论】:

      【解决方案3】:

      反编译包含 lombok 注释的类,以查看 lombok 如何生成源代码,然后考虑该代码编写 junits。 例如在@ToString的情况下,显式调用类对象的toString方法,即obj.toString();

      【讨论】:

      • 你能写一个例子吗?
      【解决方案4】:

      最好使用 pl.pojo 库来测试 pojo 模型类。

      【讨论】:

        猜你喜欢
        • 2020-04-13
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        • 2019-02-17
        • 1970-01-01
        相关资源
        最近更新 更多