使用Mockito和PowerMockito模拟类对象

Lan*_*opp 7 java junit mockito powermock

是否可以使用Mockito和/或PowerMockito来模拟类对象?

就像是:

Class<Runnable> mockRunnableClass = mock(Class<Runnable>.class);
Run Code Online (Sandbox Code Playgroud)

jhe*_*cks 2

模拟类的替代方法可能是使用工厂。我知道您担心重构,但这可以在不更改类的公共 API 的情况下完成。您没有提供太多代码来理解您要测试的类,但这里有一个在不更改 API 的情况下进行重构的示例。这是一个微不足道的课程,但它可能会给你一个想法。

public class Instantiator {

  public Runnable getNewInstance(Class<Runnable> runnableClass) throws Exception {
    return runnableClass.newInstance();
  }
}
Run Code Online (Sandbox Code Playgroud)

当然,测试这个简单的类最简单的方法是使用真正的 Runnable 类,但是如果您尝试模拟该类,您就会遇到所遇到的问题。所以,你可以这样重构它:

public class PassThruFactory {
  public Object newInstance(Class<?> clazz) throws Exception {
    return clazz.newInstance();
  }
}

public class Instantiator {
  private PassThruFactory factory = new PassThruFactory();

  public Runnable getNewInstance(Class<Runnable> runnableClass) throws Exception {
    return (Runnable)factory.newInstance(runnableClass);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,Instantiator 使用相同的公共 API 完全执行了之前所做的(非常简单的)操作,并且不需要该类的任何客户端执行自己的任何特殊注入。但是,如果您想模拟工厂类并注入它,那很容易做到。