问题示例:

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
    }

07-24 13:40