我正在尝试测试一个包含许多私有类的类(是的,我知道这通常被认为是可测性的不良实践,但这个问题与设计原则无关).我的课看起来像这样:
public class EnclosingClass {
.
.
.
private class InnerClass implements InnerClassType {
public InnerClass(){ /* do stuff */}
public int InnerClassMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
InnerClassType
是一个公共接口我已经尝试通过执行以下操作来实现具有powermock的类:
Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass");
Constructor constructor = Whitebox.getConstructor(clazz, null);
InnerClassType innerClass = (InnerClassType) constructor.newInstance(null);
Run Code Online (Sandbox Code Playgroud)
并且:
Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass");
InnerClassType innerClass = (InnerClassType) Whitebox.invokeConstructor(clazz);
Run Code Online (Sandbox Code Playgroud)
然而,在两次尝试中,我得到了一个 ConstructorNotFoundException
是否有可能实例化这些内部类?如果是的话,我哪里错了?
您应该能够通过以下mod修改您的ConstructorNotFoundExeception以进行第一次尝试:
Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass");
Constructor constructor = Whitebox.getConstructor(clazz, EnclosingClass.class);
InnerClassType innerClass = (InnerClassType) constructor.newInstance(new EnclosingClass());
Run Code Online (Sandbox Code Playgroud)
由于你的内部类不是静态的,它隐含地期望来自外部类的"this"引用.使用这种方法,看起来你必须明确它.