我有以下类(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/

10-11 20:14