PowerMock Mockito: how to mock all static methods?

2019-02-24 07:12发布

问题:

Do we need to mock all static methods of a class when using PowerMock (with Mockito)? I mean, suppose we have:

class MockMe {
   public static MockMe getInstance(){
              //return new Instance via complex process;
   }

   public static List<X> anotherStaticMethod(){
      // does xyz
   }
}

My question, if I need to mock getInstance method, is it necessary to mock "anotherStaticMethod" as well?

PowerMock version:1.3, Mockito version:1.8

回答1:

No you can use partial mocking using spy in PowerMockito. Or you can use the stubbing API:

stub(method(MockMe.class, "getInstance")).toReturn(myMockMeInstance);


回答2:

Mocking Static Method How to mock and stub:

Add @PrepareForTest at class level.

@PrepareForTest(Static.class) // Static.class contains static methods

Call PowerMockito.mockStatic() to mock a static class (use PowerMockito.spy(class) to mock a specific method):

PowerMockito.mockStatic(Static.class);

Just use Mockito.when() to setup your expectation:

Mockito.when(Static.firstStaticMethod(param)).thenReturn(value);