這裏是我的類層次結構的JUnit測試:調用父類的方法保護
abstract Class A
{
int i = 0;
protected init (String param1, String param2)
{
//do lots of common things based on param1, param2 and save data in i
}
}
再就是它實現了即
Class B extends A
{
public B()
{
super();
}
public void performSomeAction()
{
init (param1_specific_to_class_B, param2_specific_to_class_B); //calling parent class method
//do rest of teh random things
}
}
現在3-4班,我試圖寫一個JUnit測試類A.基本上我想測試什麼init
方法正在做的是否準確。我想這
Class clas = A.class;
B b = new B();
Method A_init;
A_init = clas.getDeclaredMethod("init", String.class, String.class);
A_init.invoke(b, param1_specific_to_class_B, param2_specific_to_class_B);
但它不是從另一個包工作,我得到以下異常的一類
java.lang.IllegalAccessException: Class test.package.subpackage.ATest can not access a member of class package.subpackage.A with modifiers "protected"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Method.invoke(Method.java:578)
at test.package.subpackage.ATest.initTest(ATest.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
將類移動到該包不是一個選項,因爲我們有2個不同的包heirarchy(項目類在src文件夾中,測試在測試foldeR中)。感謝'setAccessible(true)'。多數民衆贊成我正在尋找 – 2013-02-19 23:29:30
正如Maven項目所發生的,你有一個src和一個測試文件夾,但不同的文件夾不一定意味着不同的包。 – Lucas 2013-02-19 23:48:53