java - Mockito/PowerMockito 模拟私有(private)工厂方法

标签 java mockito private factory-method

我想使用以下链接中建议的模式 1: https://code.google.com/p/mockito/wiki/MockingObjectCreation 并具有以下类:

public class MyClass {
  private AnyType anyObject;
  private Foo foo; // Foo is a thirdparty class

  public MyClass(AnyType anyObject) {
    //...
    foo = makeFoo();
  }

  private Foo makeFoo() {
    return new Foo();
  }
}

我正在尝试进行如下测试:

@Test
public void myTestMethod() {
  MyClass myClass = Mockito.spy(new MyClass());

  // now i want to do something like this:
  Foo mockFoo= Mockito.mock(Foo.class);
  // Mockito.doReturn(mockFoo).when(myClass).makeFoo());
}

问题是我的工厂方法 makeFoo 是私有(private)方法,所以我无法访问它。我不想仅仅为了测试而公开它。我的测试类与我的生产代码不在同一个包中,因此使其仅对包可见是行不通的。

更新: 现在我发现了另一个问题。假设 makeFoo() 是公共(public)的,'mockFoo' 也不会被返回,但真正的 makeFoo() 方法被调用。发生这种情况是因为 makeFoo() 的调用(在 MyClass 的构造函数中)是在创建 mockFoo 之前进行的。

有人知道如何解决这个问题还是我做错了什么?

提前感谢你们的帮助!!

最佳答案

关于java - Mockito/PowerMockito 模拟私有(private)工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19270890/

相关文章:

java - GWT RPC : Is it secure to send plain-text password

Java程序由控制台控制?

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 如何设置对自定义 JOptionPane 的响应?

Ruby 私有(private)实例变量,有异常(exception)

java - Mockito 在 put 请求中给出错误

java - Mockito 模拟列表时出现问题

java - Mockito:获取模拟对象中字段的值

c++ - 聚合初始化绕过私有(private)类构造函数

私有(private)属性的 Javascript 动态 getter/setter