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