java - PowerMockito : how to mock methods called by the constructor?

标签 java mockito powermock

我有以下类(class):

public class Foo {

  public Foo() {
     initField1();
     initField2();
     initField3();
  }

}

我需要更改行为(模拟)initField1()initField3(),让他们什么都不做或做他们实际做的其他事情。我有兴趣执行 initField2() 的实际代码。

我想写下面的测试:

Foo foo = new Foo();
assertTrue(foo.myGet());

myGet() 返回由 initField2() 计算的 Foo 属性。

initField() 方法当然是私有(private)的。

我怎么能做这样的事情?

感谢您的帮助和最诚挚的问候。

最佳答案

考虑到遗留代码中可能发生任何事情 :) 您可以使用 PowerMock 来抑制方法,如 http://code.google.com/p/powermock/wiki/SuppressUnwantedBehavior 中所述。

import static org.powermock.api.support.membermodification.MemberMatcher.methods;
import static org.powermock.api.support.membermodification.MemberModifier.suppress;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class FooTest {

    @Test
    public void testSuppressMethod() throws Exception {
        suppress(methods(Foo.class, "initField1", "initField3"));
        Foo foo = new Foo();
    }
}

不过,您应该在获得足够的测试覆盖率后重构该类。

关于java - PowerMockito : how to mock methods called by the constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403435/

相关文章:

java - 确保模拟调用时条件返回 false

java - Powermockito : mocking static method

java - 当尝试在静态方法调用中模拟静态方法调用时,Powermock 会调用初始方法

java - 在异步执行时停止函数链执行的最佳实践是什么?

java - 创建一个数组并尝试声明内部循环发现错误 ArrayIndexOutOfBoundsException

javax.swing.JComponent 无法解析

java - Mockito 更改非 void 方法的参数值

java - 对泛型类使用 Matchers.isNull()

java - 如何使用 PowerMock/Mockito 和 TestNG 为最终类的(公共(public))方法编写 _spy_ ?

java - 在 Apache POI 中应用价格和百分比格式