[英]How to cover 100% Sonarqube code coverage on Java bean class with @Getter @Builder Lombok annotation
我正在呼叫第三方 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;
}
MyHeader.java
@Getter
@Builder
public class MyHeader {
private String username;
private String password;
}
我正在使用創建請求 object
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 端點將獲得 null 值。 看起來在將對象設置為 MyRequest.java 時調用了@Getter。 但出於某種原因,它沒有包含在我的測試用例中。
如何在沒有 @Getter 的情況下完成這項工作,或者有沒有辦法用 @Getter 注釋覆蓋所有字段(帳號、用戶名和密碼)? 任何幫助表示贊賞。
創建一個 lombok.config 並向其添加以下屬性。
lombok.addLombokGeneratedAnnotation = true
對於 Maven 項目,項目 basedir 中名為 lombok.config 的文件是正確的位置,但其他方式/位置可能適用,請參閱https://projectlombok.org/features/configuration
您需要以某種方式指示 Jackson 在序列化期間應包含哪些數據。 默認機制是為此目的使用吸氣劑。
將 @Getter 替換為 @JsonProperty 以獲得 100% 的代碼覆蓋率。
@Builder
public class MyBody {
@JsonProperty
private String accountNumber;
}
這不是我的答案。 我從我的另一篇文章中得到了這個答案, 為什么第 3 方 REST API 在刪除 @Getter Lombok 注釋時獲取請求字段的 null 值
謝謝@Alexander Ivanchenko
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.