java - PowerMock 可以为测试用例实例化一个内部类吗?

标签 java powermock

我正在尝试用多个私有(private)类测试一个类(是的,我知道这通常被认为是可测试性的不良做法,但这个问题与设计原则无关)。我的类(class)看起来像这样:

public class EnclosingClass {
  .
  .
  .
  private class InnerClass implements InnerClassType {
     public InnerClass(){ /* do stuff */}
     public int InnerClassMethod();
  }
}
  • InnerClassType 是一个公共(public)接口(interface)

我尝试通过以下方式使用 powermock 实例化类:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass");
Constructor constructor = Whitebox.getConstructor(clazz, null);
InnerClassType innerClass = (InnerClassType) constructor.newInstance(null);

还有:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass");
InnerClassType innerClass = (InnerClassType) Whitebox.invokeConstructor(clazz);

但是,在这两次尝试中我都得到了一个ConstructorNotFoundException

是否可以实例化这些内部类?如果是这样,我哪里出错了?

最佳答案

您应该能够通过以下 mod 将您的 ConstructorNotFoundExeception 移到您的第一个努力中:

Class clazz = Whitebox.getInnerClassType(EnclosingClass.class, "InnerClass");
Constructor constructor = Whitebox.getConstructor(clazz, EnclosingClass.class);
InnerClassType innerClass = (InnerClassType) constructor.newInstance(new EnclosingClass());

由于您的内部类不是静态的,它隐含地期望来自外部类的“this”引用。使用此方法,看起来您必须明确使用它。

关于java - PowerMock 可以为测试用例实例化一个内部类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13201943/

相关文章:

java - 如何将我的项目转换回 IntelliJ 项目?

java - 使用 PowerMock 模拟私有(private)方法,但仍会调用底层方法

java - 如何模拟 super 引用(在 super 类上)?

junit - 如何使用 PowerMockito 捕获构造函数参数

java - @EnableSpringConfigured 导入

Java:有界类型的 getClass()

java - PowerMockito - 如何将 whenNew() 与类型列表一起使用?

java - AnyString() 作为单元测试的参数

java - ImageIO.read(...) - 非常慢,有更好的方法吗?

java - 有没有办法将应用程序从 Travis 部署到 Amazon ec2?