Java中如何定义嵌套注解并实现测试初始化与字段访问?
嵌套注解定义与测试使用方案
1. 改造MockToken注解,添加嵌套Permission注解
直接在原MockToken内部定义嵌套的Permission注解,同时新增permissions数组属性来对应目标JSON格式的权限列表:
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface MockToken { String user() default "user"; String[] allowedConfigs() default {}; // 嵌套注解:描述单条权限的结构 @interface Permission { // 对应JSON里的resource_id String resourceId() default ""; // 对应JSON里的resource_scopes String[] resourceScopes() default {}; // 对应JSON里的exp long exp() default 0L; } // 权限数组,支持配置多条权限 Permission[] permissions() default {}; }
2. 测试中配置示例权限
方式1:直接在注解内配置
适合单次使用的场景,直接在测试方法上编写权限细节:
@Test @MockToken( user = "user1", allowedConfigs = {"testUser"}, permissions = { @MockToken.Permission( resourceId = "xy", resourceScopes = {"download"}, exp = 1522334692L ) } ) public void testWithPermission() { // 测试逻辑 }
方式2:定义可复用的权限常量
如果需要在多个测试中复用同一份权限配置,可以在测试类里定义静态常量(必须是static final,满足注解属性的编译时常量要求):
public class PermissionTest { // 定义复用的权限示例 public static final MockToken.Permission examplePermission = @MockToken.Permission( resourceId = "xy", resourceScopes = {"download"}, exp = 1522334692L ); @Test @MockToken( user = "user1", allowedConfigs = {"testUser"}, permissions = {examplePermission} ) public void testWithReusablePermission() { // 测试逻辑 } }
3. 访问注解中的权限字段
通过反射获取MockToken注解后,就能遍历权限数组并访问每个字段:
// 获取测试方法的反射实例 Method testMethod = PermissionTest.class.getMethod("testWithReusablePermission"); // 获取方法上的MockToken注解 MockToken mockToken = testMethod.getAnnotation(MockToken.class); // 遍历权限数组,读取字段值 for (MockToken.Permission permission : mockToken.permissions()) { String resourceId = permission.resourceId(); String[] scopes = permission.resourceScopes(); long exp = permission.exp(); // 这里可以把这些值转换成你需要的JSON格式,或者直接用于逻辑判断 }
如果只有单条权限,直接通过mockToken.permissions()[0].resourceId()即可访问目标字段。
内容的提问来源于stack exchange,提问作者jd466
相关产品推荐
相关产品推荐

