AssertJ如何按列表元素的属性值比较两个列表是否相等?
是可以实现的,不过默认的AssertJ API不支持你示例中直接链式调用.lastName的写法,需要用专门的属性提取API调整写法,具体方案如下:
- 如果你为
User类定义了getLastName()公共getter方法,推荐用方法引用的方式提取属性,类型安全性更高:
// containsExactly 要求元素的顺序、数量、取值完全和预期一致,等价于集合equals判断 assertThat(userList) .extracting(User::getLastName) .containsExactly("A", "B", "C");
- 如果你的
User类没有定义getter,和示例一样是默认包访问权限的属性,可以直接传属性名,AssertJ会通过反射读取属性值:
assertThat(userList) .extracting("lastName") .containsExactly("A", "B", "C");
如果你想要完全贴近你示例里的链式调用写法,可以引入AssertJ的断言生成插件,为你的User类生成自定义断言类,配置完成后就可以用接近你预期的语法完成校验。
内容的提问来源于stack exchange,提问作者LunaticJape
相关产品推荐
相关产品推荐

