【问题标题】:@WithMockUser read value from static enum or string@WithMockUser 从静态枚举或字符串中读取值
【发布时间】:2021-08-12 10:45:54
【问题描述】:

在@WithMockUser 的注解中,我想从常量枚举或字符串变量和列表中读取值。

例如,假设我有一个像下面这样的枚举:

public enum RoleEnum {
    ROLE_ADMIN
    ROLE_MODERATOR,
    ROLE_USER;

    public static final String[] X_ROLE_GROUP = {ROLE_ADMIN.name(), ROLE_MODERATOR.name()};
}

我想通过像这样将枚举值转换为字符串来使用@WithMockUser,但以下语法不起作用:

@WithMockUser(roles = RoleEnum.ROLE_ADMIN.name())
@Test
public void test {
    ...
}

有没有一种方法可以为单个枚举值和枚举列表(例如 X_ROLE_GROUP)实现此目的?

【问题讨论】:

    标签: spring spring-boot spring-security enums mockito


    【解决方案1】:

    好吧,roles 不需要 ROLE_ 前缀,而 authorities 需要。注释值必须是编译时常量。你可以试试这个:

    @Test
    @WithMockUser(roles = Role.ROLE_ADMIN)
    void test() {
    }
    
    public static final class Role {
        public static final String ROLE_ADMIN = "ADMIN";
        public static final String ROLE_MODERATOR = "MODERATOR";
        public static final String ROLE_USER = "USER";
    
        private Role() {
        }
    
        public static final String[] X_ROLE_GROUP = {
                ROLE_ADMIN,
                ROLE_MODERATOR
        };
    }
    

    或者如果你想要一个mixin风格(其他类可以实现继承常量),试试:

    public interface Role {
        String ROLE_ADMIN = "ADMIN";
        String ROLE_MODERATOR = "MODERATOR";
        String ROLE_USER = "USER";
    
        String[] X_ROLE_GROUP = {
                ROLE_ADMIN,
                ROLE_MODERATOR
        };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多