簡體   English   中英

如何使用@Getter @Builder Lombok 注釋覆蓋 Java bean class 上的 100% Sonarqube 代碼覆蓋率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM