如何使用@Getter @Builder Lombok注释在Java bean类上覆盖100%的Sonarqube代码覆



我正在呼叫第三方REST端点。

请求示例

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

我创建了3个bean类

MyRequest.java

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

MyBody.java

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

MyHeader.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不是。对于所有字段,我得到的错误信息是&;Not covered by tests&;

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

如何使这个工作没有@Getter或有一种方法来覆盖所有字段(accountNumber,用户名和密码)与@Getter注释?如有任何帮助,不胜感激。

创建一个龙目表。配置并添加以下属性:

lombok.addLombokGeneratedAnnotation = true

对于Maven项目,一个名为lombok的文件。在项目的basedir配置是正确的位置,但其他方式/位置也可以适用,参见https://projectlombok.org/features/configuration

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

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

@Builder
public class MyBody {
@JsonProperty
private String accountNumber;
}
这不是我的答案。我从我的另一个帖子中得到了这个答案为什么第三方REST API's在删除@Getter Lombok注释时为请求字段获取空值

感谢@Alexander Ivanchenko

最新更新