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

如何使用AssertJ断言校验Java枚举值及其对应字段

基于AssertJ的简洁枚举测试实现

你原有的写法需要手动维护预期映射表,用AssertJ内置的集合提取断言可以大幅简化代码,完全覆盖两项校验要求,还能避免冗余代码。

核心实现代码

注意你原有测试代码里的枚举名PaymentType和定义的PaymentMethod不一致,以下代码统一使用正确的枚举名:

import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;

class PaymentMethodTest {

    @Test
    void should_match_all_enum_definitions() {
        // 1. 先校验枚举总数量和预期一致,防止后续新增枚举值漏测
        assertThat(PaymentMethod.values()).hasSize(4);

        // 2. 严格校验每个枚举项的id和定义完全匹配
        // containsExactly会同时校验值的顺序、内容完全一致,缺项、错值、顺序错都会触发断言失败
        assertThat(PaymentMethod.values())
                .extracting(PaymentMethod::getId, Long.class)
                .containsExactly(1L, 2L, 3L, 4L);
    }

    // 如需单独校验指定id对应枚举存在性,可补充该用例
    @Test
    void should_match_correct_enum_for_each_id() {
        assertThat(PaymentMethod.CREDITCARD.getId()).isEqualTo(1L);
        assertThat(PaymentMethod.PAYPAL.getId()).isEqualTo(2L);
        assertThat(PaymentMethod.APPLE_PAY.getId()).isEqualTo(3L);
        assertThat(PaymentMethod.GOOGLE_PAY.getId()).isEqualTo(4L);
    }
}

校验逻辑说明

这套写法完全覆盖你需要的两项校验规则:

  • 枚举存在性校验:PaymentMethod.values()会返回所有定义的枚举实例,hasSize和containsExactly组合校验时,只要缺失任意一个预期枚举值,断言会直接失败
  • 关联字段匹配校验:extracting(PaymentMethod::getId)会提取所有枚举实例的id字段,和传入的预期值列表做严格匹配,只要任意一个id和预期不符就会报错

如果需要模拟业务中「根据id查找对应枚举」的场景,还可以加过滤断言,避免出现id重复、id对应枚举错误的问题:

@Test
void should_map_id_to_correct_enum_instance() {
    assertThat(PaymentMethod.values())
            .filteredOn(pm -> pm.getId() == 1L)
            .containsExactly(PaymentMethod.CREDITCARD);
    assertThat(PaymentMethod.values())
            .filteredOn(pm -> pm.getId() == 2L)
            .containsExactly(PaymentMethod.PAYPAL);
    assertThat(PaymentMethod.values())
            .filteredOn(pm -> pm.getId() == 3L)
            .containsExactly(PaymentMethod.APPLE_PAY);
    assertThat(PaymentMethod.values())
            .filteredOn(pm -> pm.getId() == 4L)
            .containsExactly(PaymentMethod.GOOGLE_PAY);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:54:22