How to mock static method without powermock

前端 未结 4 1667
野趣味
野趣味 2020-12-09 01:53

Is there any way we can mock the static util method while testing in JUnit?

I know Powermock can mock static calls, but I don\'t want to use Powermock.

Are

4条回答
  •  春和景丽
    2020-12-09 02:29

    (I assume you can use Mockito though) Nothing dedicated comes to my mind but I tend to use the following strategy when it comes to situations like that:

    1) In the class under test, replace the static direct call with a call to a package level method that wraps the static call itself:

    public class ToBeTested{
    
        public void myMethodToTest(){
             ...
             String s = makeStaticWrappedCall();
             ...
        }
    
        String makeStaticWrappedCall(){
            return Util.staticMethodCall();
        }
    }
    

    2) Spy the class under test while testing and mock the wrapped package level method:

    public class ToBeTestedTest{
    
        @Spy
        ToBeTested tbTestedSpy = new ToBeTested();
    
        @Before
        public void init(){
            MockitoAnnotations.initMocks(this);
        }
    
        @Test
        public void myMethodToTestTest() throws Exception{
           // Arrange
           doReturn("Expected String").when(tbTestedSpy).makeStaticWrappedCall();
    
           // Act
           tbTestedSpy.myMethodToTest();
        }
    }
    

    Here is an article I wrote on spying that includes similar case, if you need more insight: sourceartists.com/mockito-spying

提交回复
热议问题