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

如何用AssertJ断言列表元素的nick或surname包含指定值?

校验列表元素属性的最优断言实现

原始代码

@Data
@AllArgsConstructor
public class TolkienCharacter{
    String nick;
    String name;
    String surname;
}


@Test
void go(){
    TolkienCharacter frodo = new TolkienCharacter("GoodFrodo", "Frodo", "Baggins");
    TolkienCharacter togo = new TolkienCharacter("Hobbit", "Togo", "Goodbody");
    List<TolkienCharacter> goodCharacters = Arrays.asList(frodo, togo);
}

需求

编写断言,校验goodCharacters列表中的所有元素,其nick或surname属性包含"good"字符串(默认按不区分大小写处理,如需严格匹配可调整)。

最优实现方案

方案1:使用AssertJ(推荐)

AssertJ是专门的断言库,语法简洁直观,断言失败时会返回清晰的错误信息(比如具体哪个元素不符合条件),非常适合集合校验场景。

代码实现:

import org.assertj.core.api.Assertions;

@Test
void go(){
    TolkienCharacter frodo = new TolkienCharacter("GoodFrodo", "Frodo", "Baggins");
    TolkienCharacter togo = new TolkienCharacter("Hobbit", "Togo", "Goodbody");
    List<TolkienCharacter> goodCharacters = Arrays.asList(frodo, togo);

    // 断言所有元素满足条件
    Assertions.assertThat(goodCharacters)
        .allMatch(character -> 
            character.getNick().toLowerCase().contains("good") 
            || character.getSurname().toLowerCase().contains("good")
        );
}

方案2:JUnit 5原生断言 + Stream

如果不想引入额外依赖,可使用JUnit原生断言结合Stream API实现:

import static org.junit.jupiter.api.Assertions.assertTrue;

@Test
void go(){
    TolkienCharacter frodo = new TolkienCharacter("GoodFrodo", "Frodo", "Baggins");
    TolkienCharacter togo = new TolkienCharacter("Hobbit", "Togo", "Goodbody");
    List<TolkienCharacter> goodCharacters = Arrays.asList(frodo, togo);

    // 用Stream判断所有元素是否符合条件,再用assertTrue断言
    assertTrue(goodCharacters.stream().allMatch(character -> 
        character.getNick().toLowerCase().contains("good") 
        || character.getSurname().toLowerCase().contains("good")
    ));
}

注意事项

  • 若需要严格区分大小写匹配,只需去掉代码中的toLowerCase()方法即可。
  • AssertJ相比原生断言的优势在于:当断言失败时,会明确指出是哪个元素不满足条件,方便快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:51:32