最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 AssertJ assertThat(List) 泛型断言怎么进行元素属性断言
时间:2026-07-14 09:36:02 编辑:袖梨 来源:一聚教程网
AssertJ 对 List 元素属性断言的核心是 extracting 方法,支持字段/方法提取、嵌套属性、多属性元组;配合 asList() 或 as(InstanceOfAssertFactory) 实现类型安全断言;可通过 filteredOn 先筛选后提取;亦支持 Function 自定义提取逻辑。
AssertJ 对 List 进行元素属性断言,核心是用 extracting 提取属性,再链式断言提取结果。不需要手动遍历,也不依赖泛型擦除带来的类型丢失问题——AssertJ 通过反射+泛型推导,在运行时保留足够信息完成类型安全的校验。
用 extracting 提取字段或方法返回值
最常用方式:调用 extracting("fieldName") 或 extracting("getMethodName"),AssertJ 自动识别 getter 或公共字段。支持嵌套属性(如 "user.name")和多属性提取(返回元组)。
assertThat(users).extracting("name").contains("Alice", "Bob");assertThat(orders).extracting("customer.id", "amount").contains(tuple(101L, BigDecimal.valueOf(99.9)));- 若字段是 private 但有 public getter,仍可用
"age"(自动匹配getAge())
配合 asList() 或 as(InstanceOfAssertFactory) 做类型安全断言
单纯 extracting 返回的是 Object 列表,若需对提取后的值做进一步类型化断言(比如断言每个 age 是 Integer),可接 asList() 转为 AbstractListAssert,或用 as(InstanceOfAssertFactory) 显式指定类型。
assertThat(users).extracting("age").asList().allSatisfy(age -> assertThat(age).isGreaterThan(0));assertThat(users).extracting("age").as(InstanceOfAssertFactories.INTEGER).allMatch(age -> age > 18);
用 filteredOn + extracting 组合做条件筛选后断言
先按条件过滤元素,再提取属性断言,避免全量遍历。适合验证“满足某条件的元素,其某属性应等于什么”。
立即学习“Java免费学习笔记(深入)”;
assertThat(users).filteredOn("active", true).extracting("role").containsOnly("USER", "ADMIN");assertThat(products).filteredOn(p -> p.getPrice().compareTo(BigDecimal.ZERO) > 0).extracting("name").doesNotContainNull();
自定义提取逻辑:用 Function 替代字符串路径
当属性名动态、含计算逻辑,或需处理 null 安全时,传入 lambda 表达式更灵活可靠。
assertThat(users).extracting(user -> user.getProfile().getAvatarUrl()).contains("https://...");assertThat(items).extracting(item -> Optional.ofNullable(item.getTags()).orElse(List.of()).size()).allMatch(size -> size >= 1);
相关文章
- 以下哪种职业的执业人员具有审计签字权 蚂蚁新村今日答案2026.1.14 07-14
- 蚂蚁新村今日答案1.14 07-14
- 蚂蚁新村2026年1月14日答案最新 07-14
- 蚂蚁庄园小鸡答题今日答案2026年1月15日 07-14
- 蚂蚁庄园今日最新答案1.15 07-14
- 蚂蚁庄园今日答案最新2026.1.15 07-14