You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Lombok的@AllArgsConstructor编写JUnit测试用例?

为Lombok @AllArgsConstructor注解的ABC类编写JUnit测试用例

核心测试方向

针对ABC类的@AllArgsConstructor,重点验证全参构造函数能否正确初始化所有私有字段;结合@JsonIgnoreProperties,额外测试JSON序列化/反序列化的兼容性(未知字段不影响解析)。

必备依赖(Maven示例)

确保项目引入以下依赖:

<!-- JUnit 5 测试核心 -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>
<!-- Jackson 用于JSON序列化测试 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
    <scope>test</scope>
</dependency>
<!-- Lombok 编译期注解支持 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.28</version>
    <scope>provided</scope>
</dependency>

测试用例代码

1. 验证全参构造函数的字段初始化

import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import static org.junit.jupiter.api.Assertions.*;

class ABCTest {

    @Test
    void testAllArgsConstructor() {
        // 准备测试数据
        Integer testA = 123;
        String testB = "demoB";
        BigDecimal testC = new BigDecimal("10.5");
        BigDecimal testD = new BigDecimal("20.7");
        String testE = "demoE";
        String testF = "demoF";
        String testG = "demoG";

        // 通过全参构造函数创建实例
        ABC abc = new ABC(testA, testB, testC, testD, testE, testF, testG);

        // 断言字段初始化正确
        assertEquals(testA, abc.getA());
        assertEquals(testB, abc.getB());
        assertEquals(testC, abc.getC());
        assertEquals(testD, abc.getD());
        assertEquals(testE, abc.getE());
        assertEquals(testF, abc.getF());
        assertEquals(testG, abc.getG());
    }
}

提示:ABC类的字段都是私有,测试时建议给类添加@Getter注解生成getter方法;如果不想修改原类,也可以用反射读取私有字段,示例代码如下:

// 反射读取私有字段示例
Field fieldA = ABC.class.getDeclaredField("A");
fieldA.setAccessible(true);
assertEquals(testA, fieldA.get(abc));

2. 测试@JsonIgnoreProperties的兼容性

验证JSON包含未知字段时,反序列化不会报错且已知字段解析正常:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import static org.junit.jupiter.api.Assertions.*;

class ABCTest {

    private final ObjectMapper objectMapper = new ObjectMapper();

    @Test
    void testJsonDeserializationWithUnknownFields() throws Exception {
        // 构造带未知字段的JSON字符串
        String json = """
                {
                    "A": 456,
                    "B": "jsonDemoB",
                    "c": "30.2",
                    "d": "40.8",
                    "e": "jsonDemoE",
                    "f": "jsonDemoF",
                    "g": "jsonDemoG",
                    "extraField": "ignoreMe"
                }
                """;

        // 反序列化到ABC实例
        ABC abc = objectMapper.readValue(json, ABC.class);

        // 断言已知字段解析正确
        assertEquals(456, abc.getA());
        assertEquals("jsonDemoB", abc.getB());
        assertEquals(new BigDecimal("30.2"), abc.getC());
        assertEquals(new BigDecimal("40.8"), abc.getD());
        assertEquals("jsonDemoE", abc.getE());
        assertEquals("jsonDemoF", abc.getF());
        assertEquals("jsonDemoG", abc.getG());
    }
}

内容的提问来源于stack exchange,提问作者Praveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:00:12