2 回答

TA貢獻1862條經(jīng)驗 獲得超6個贊
即使也可以使用Reflection訪問方法privatestatic
檢查下面的示例以使用反射訪問私有方法
例子:
package demo;
public class Employee {
private static class EmployeeInnerKlass {
static void getText() {
System.out.println("Employee.EmployeeInnerKlass.getText()");
}
}
}
class InnerKlass {
static String getText() {
return "Hello World";
}
}
package demo;
import java.lang.reflect.Method;
import org.testng.annotations.Test;
public class EmployeeTest {
@Test
public void accessPrivateMethods() throws Throwable {
Class<?> klassEmployee = Class.forName("demo.Employee");
Class<?> EmployeeInnerKlass = klassEmployee.getDeclaredClasses()[0];
//To get the "EmployeeInnerKlass" declared class in the Employee Class
Class<?> InnerKlass = Class.forName("demo.InnerKlass");
Method method = EmployeeInnerKlass.getDeclaredMethod("getText", null);
method.setAccessible(true);
method.invoke(null, null);
Method method2 = InnerKlass.getDeclaredMethod("getText", null);
method2.setAccessible(true);
method2.invoke(null, null);
}
}
我用過 TestNG 只是將它更改為 JUnit 并使用它。

TA貢獻1802條經(jīng)驗 獲得超10個贊
我在私有靜態(tài)內(nèi)部類中有一個方法。我想在我的 junit 測試用例中訪問這個方法。有可能嗎?如果有的話怎么辦?
您可以做的最簡單的事情是將靜態(tài)成員類的可訪問性從私有訪問更改為包私有訪問。
這將允許您從您的 junit 測試類訪問您的成員類的非私有成員(只要它被賦予相同的包標題)。進行此更改不會影響項目的導出 API;訪問您的項目包的客戶將看不到任何新方法或成員。
當您對測試感到滿意時,您可以簡單地再次將靜態(tài)成員類設為私有。
添加回答
舉報