问题示例:
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
实例然后替换函数,但是因为在我的情况下从构造函数中调用它所以要迟到了。
是否可以在创建它们之前将私有函数模拟到所有实例?
答案 0 :(得分:2)
不是直接但是,您可以suppress然后使用power mockito进行模拟
@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
}