如何为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
相关产品推荐
相关产品推荐

