SonarCloud提示带JsonProperty注解的类属性未被测试覆盖的问题咨询
解决SonarCloud标记Kotlin Data Class注解行未覆盖的问题
你遇到的核心问题是:直接实例化Data Class不会触发@JsonProperty注解的处理逻辑,SonarCloud会认为注解所在的属性行没有被真正执行——哪怕你已经访问过该属性。下面是几种可行的解决办法:
1. 补充反序列化测试(推荐)
添加模拟Jackson反序列化JSON的测试用例,触发@JsonProperty的解析逻辑,SonarCloud就能识别到该行的覆盖:
import com.fasterxml.jackson.databind.ObjectMapper import org.junit.jupiter.api.Test import kotlin.test.assertEquals class ResponseTest { @Test fun `deserialize Response from JSON`() { val json = """{"id":"test-id","quantity_of_days":10}""" val response = ObjectMapper().readValue(json, Response::class.java) assertEquals(10, response.quantityOfDays) assertEquals("test-id", response.id) } // 保留原有实例化测试 @Test fun `create Response instance`() { val response = Response("test-id", 10) assertEquals(10, response.quantityOfDays) } }
2. 用Sonar注释忽略该行检查
如果不想补充测试,可在属性行添加//NOSONAR注释,强制SonarCloud跳过该行的覆盖检测:
@JsonIgnoreProperties(ignoreUnknown = true) data class Response( val id: String, @JsonProperty("quantity_of_days") //NOSONAR val quantityOfDays: Int, )
注意:这是跳过检查而非真正覆盖,仅在确认逻辑无问题时使用。
3. 全局配置忽略(不推荐)
可在项目的sonar-project.properties中添加规则,但会影响整个项目的覆盖检查,仅适合特殊场景:
sonar.coverage.exclusions=**/Response.kt
内容的提问来源于stack exchange,提问作者Lavínia Beghini
相关产品推荐
相关产品推荐

