我在Java中使用了以下公共类:
public class MyClass
{
private static class MyNestedClass<T> extends SomeOtherClass
{
}
}
我正在编写一个测试,我需要使用PowerMockito为MyNestedClass类创建一个模拟对象,但由于它是私有的,因此无法访问该类。有没有办法可以访问MyNestedClass?
我尝试了以下内容:
MyClass.MyNestedClass myNestedClass = new MyClass.MyNestedClass()
和
MyClass testNoteActivity = Mockito.spy(MyClass.class);
testNoteActivity.MyNestedClass myNestedClass = new testNoteActivity.MyNestedClass()
两者都不适合我。
答案 0 :(得分:2)
您可以通过反射访问私有类:
final Class<?> nestedClass = Class.forName("MyClass$MyNestedClass");
final Constructor<?> ctor = nestedClass.getDeclaredConstructors()[0];
ctor.setAccessible(true);
final Object instance = ctor.newInstance();
System.out.println(instance);
但这不是很好的做法。
要查找包含Class.forName
的课程,您应提供完整的课程名称,包括课程。例如。如果MyClass
位于com.test
包中,则此字符串应为"com.test.MyClass$MyNestedClass"
。