【问题标题】:How to cover 100% Sonarqube code coverage on Java bean class with @Getter @Builder Lombok annotation如何使用 @Getter @Builder Lombok 注释覆盖 Java bean 类上的 100% Sonarqube 代码覆盖率
【发布时间】:2022-12-03 07:06:59
【问题描述】:

我正在调用第三方 REST 端点。

索取样品

{
     "body": {
        "accountNumber": "12345"
     },
     "header": {
        "username": "someusername",
        "password": "somepassword"
     }
}

我创建了 3 个 bean 类

我的请求.java

@Builder
@JsonDeserialize(builder =  MyRequest.MyRequestBuilder.class)
public class MyRequest {
    @JsonProperty("header")
    private MyHeader header;
    @JsonProperty("body")
    private MyBody body;
}

我的身体.java

@Getter
@Builder
public class MyBody {
    private String accountNumber;
}

我的Header.java

@Getter
@Builder
public class MyHeader {
    private String username;
    private String password;
}

我正在使用创建请求对象

MyBody body = MyBody.builder().accountNumber("12345").build();
MyHeader header = MyHeader.builder().username("someusername").password("somepassword").build();

MyRequest request = MyRequest.builder().body(body).header(header).build();

一切都按预期工作。 MyRequest.java 的代码覆盖率是 100%,但我的 MyBody.java 和 MyHeader.java 不是。 对于所有字段,我收到错误消息“测试未涵盖”。

通常我为 Response 对象添加 @Getter 和 @Setter。对于请求,我只是添加 @Builder 注释。 在这种情况下,如果我从 MyBody 和 MyHeader 中删除 @Getter,则第三方 REST 端点将获得空值。 看起来在将对象设置为 MyRequest.java 时调用了@Getter。但出于某种原因,它没有包含在我的测试用例中。

如何在没有 @Getter 的情况下完成这项工作,或者有没有办法用 @Getter 注释覆盖所有字段(帐号、用户名和密码)?任何帮助表示赞赏。

【问题讨论】:

    标签: java spring-boot junit sonarqube lombok


    【解决方案1】:

    创建一个 lombok.config 并向其添加以下属性。

    lombok.addLombokGeneratedAnnotation = true
    

    对于 Maven 项目,项目 basedir 中名为 lombok.config 的文件是正确的位置,但其他方式/位置可能适用,请参阅https://projectlombok.org/features/configuration

    【讨论】:

    • 这不会得到我的团队的批准。寻找其他解决方案
    【解决方案2】:

    您需要以某种方式指示 Jackson 在序列化期间应包含哪些数据。默认机制是为此目的使用吸气剂。

    将 @Getter 替换为 @JsonProperty 以获得 100% 的代码覆盖率。

    @Builder
    public class MyBody {
        @JsonProperty
        private String accountNumber;
    }
    

    这不是我的答案。我从我的另一篇文章中得到了这个答案 Why 3rd party REST API's gets null values for request fields when removing @Getter Lombok annotation

    谢谢@Alexander Ivanchenko

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2017-11-18
      • 2017-09-13
      • 2017-01-25
      相关资源
      最近更新 更多