TestNG断言失败,如何排查XML响应解析后列表包含校验的错误?
问题根因
- 方法使用错误:
List.contains()用于判断列表中是否存在单个指定元素,你直接传入整个actualList对象作为入参,相当于拿List<String>类型的对象去和expectedOutputList里的String类型元素匹配,类型不匹配必然返回false。 - 数据结构不匹配:
expectedOutputList中存储的是带括号的字符串(比如"[11, 12, 13]"),而actualList是存储3个字符串元素的列表,二者类型不一致无法直接匹配。 - 语法笔误:代码中写的
expectedOutputList.Contains(actualList)首字母大写不符合Java语法规范,List的对应方法名为小写开头的contains。
修复方案
方案1:快速修复,转字符串比对
直接将实际列表转为字符串后再匹配,适配你当前的预期值结构:
Assert.assertTrue(expectedOutputList.contains(actualList.toString()));
方案2:规范改造,直接比对列表内容(更稳定)
调整预期值的存储结构,避免依赖列表toString的输出格式,适配后续可能的格式变动:
// 定义所有符合要求的预期列表集合 List<List<String>> expectedOutputList = Arrays.asList( Arrays.asList("11", "12", "13"), Arrays.asList("13", "12", "11"), Arrays.asList("11", "13", "12"), Arrays.asList("13", "11", "12"), Arrays.asList("12", "13", "11"), Arrays.asList("12", "11", "13") ); // 直接判断实际列表是否在预期集合中 Assert.assertTrue(expectedOutputList.contains(actualList));
说明:Java中List的equals方法会逐一比对元素顺序和内容,刚好适配你需要校验msid返回顺序属于指定排列之一的场景。
内容的提问来源于stack exchange,提问作者Sreerekha R
相关产品推荐
相关产品推荐

