【转】Jmockit 修改final静态变量

来源:互联网 发布:网络游戏端口号 编辑:程序博客网 时间:2024/06/05 17:04
  • publicstatic class ClassWithConstant {
            privatestatic final Integer ANSWER = 42;
     
            publicstatic final int getAnswer() {
                returnANSWER;
            }
        }
  • 单元测试类清单
    publicclass ClassWithConstantTest {
     
     
        @Test
        publicvoid test() {
            killThreadLocal(ClassWithConstant.class.getName(),"ANSWER");
            Deencapsulation.setField(ClassWithConstant.class,43);
            assertEquals(43,newClassWithConstant().getAnswer());
        }
     
        //use reflection to remove the final modifier first
        privatevoid killThreadLocal(String klazzName, String fieldName) {
            try{
            Field field = Class.forName(klazzName).getDeclaredField(fieldName);
            field.setAccessible(true);
            Field modifiersField = Field.class.getDeclaredField("modifiers");
            modifiersField.setAccessible(true);
            intmodifiers = modifiersField.getInt(field);
            modifiers &= ~Modifier.FINAL;
            modifiersField.setInt(field, modifiers);
            field.set(null,null);
            }catch(Exception e){
     
            }
    }
    }
    作者:陈潮州
原创粉丝点击