我有下面的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()
两者都不适合我。
最佳答案
您可以通过反射访问私有类:
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"
。