在Java中访问嵌套的私有静态类

时间:2017-09-13 18:01:03

标签: java testing powermockito

我在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()

两者都不适合我。

1 个答案:

答案 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"