问题示例:
class ToBeTested {
private MyResource myResource;
public toBeTested() {
this.myResource = getResource();
}
private MyResource getResource() {
//Creating My Resource using information form a DB
return new MyResource(...);
}
}
我想模拟
getResource()
,以便能够提供MyResource
的模拟实例。我发现的有关如何模拟私有方法的所有示例均基于以下步骤:首先创建ToBeTested
实例,然后替换该函数,但是由于在我的情况下是从构造函数中调用它的,因此该操作很晚。是否可以在创建实例之前对所有实例模拟私有函数?
最佳答案
不直接,但您可以suppress,然后使用power嘲笑进行仿真
@RunWith(PowerMockRunner.class)
@PrepareForTest(ToBeTested .class)
public class TestToBeTested{
@before
public void setup(){
suppress(method(ToBeTested.class, "getResource"));
}
@Test
public void testMethod(){
doAnswer(new Answer<Void>() {
@Override
public MyResource answer(InvocationOnMock invocation) throws Throwable {
return new MyResource();
}
}).when(ToBeTested.class, "getResource");
}
ToBeTested mock = mock(ToBeTested.class);
mock.myMethod();
//assert
}