如何测试私有成员方法和变量

先考虑它是否可以单独到一个类,再考虑使用反射

class Stranger {

    public Stranger(final String name) {
        this.name = name;
    }

    private final String greet(final String hello) {
        return hello + name;
    }

    private String name = "";
}

public class PrivateTest {

    public static void main(String args[]) throws Exception {

        Stranger testObj = new Stranger("Walter");
        Class testClass = testObj.getClass();
        // get private property
        Field field = testClass.getDeclaredField("name");
        // Make the field accessible
        field.setAccessible(true);
        
        // get private method
        Class[] typeParams = new Class[] { String.class };
        Method method = testClass.getDeclaredMethod("greet", typeParams);
        // Make the method accessible
        method.setAccessible(true);
        // execute the method
        Object objParams[] = { "hello, " };
        String greet = (String)method.invoke(testObj, objParams);
        
        System.out.println(greet);
    }
}

posted @ 2010-12-15 00:28  玩玩乐乐  阅读(316)  评论(0编辑  收藏  举报