使用PowerMockito 對靜態類進行mock

如例我們需要對LogUtil.class 的 靜態方法進行mock,類格式如下,該類的兩個方法均爲靜態方法。

1

2

3

4

5

6

7

8

9

public class LogUtil {

 

        public static BaseAuditLog getLogBean(String operContent){

        return null;       

    }

     

     public static void  saveLog(String context){

         

     }

 使用PowerMockito 測試類如下 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@RunWith(PowerMockRunner.class)  //1.

@PrepareForTest({LogUtil.class}) //2.

public class AddressBookServiceTest_mock {

 

 

    @Before

    public void setUp() {

        MockitoAnnotations.initMocks(this);

    }

   @Test

    public void test_staticMethod_PowerMock()  {

        //繞過靜態類

        PowerMockito.mockStatic(LogUtil.class);//3.繞過靜態類

        when(LogUtil.getLogBean(json)).thenReturn(new SensitiveInfoOperationLog());//4.預設靜態類返回值

        String response = addressBookServiceImpl.queryAddressBookFuzzy(json);

    }

}

以上便可以實現的靜態類的mock.

因爲要實現單元測試,還需要實現對類成員變量進行mock.

有兩種主要方法

1.通過繼承方式實現

2.通過反射的方式實現

詳細信息參考鏈接   http://blog.csdn.net/fenglibing/article/details/16842655

反射具體示例如下:

 

public     class     Address{
          boolean querySwitch= false  
}

public     class     Address_test{
        private Address    address;
        
        public void test_Address(){
        //通過反射改變類成員變量值
        boolean querySwitch=false;
        Field  field=address.getClass().getDeclaredField("querySwitch");
        field.setAccessible(true);
        field.set(address,querySwitch);
    }
  }

    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章