Android單元測試 mock Context,mock靜態類的靜態方法,測試方法的順序

mock Context

我們寫單元測試時,經常會用到context對象,但是直接使用context經常報空指針異常
正確的mock方式如下
1.添加變量

@Mock
private Context mockApplicationContext;

2.在setUp方法中初始化

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

3.在使用到context的地方靈活使用mockito的when方法
比如我們用到context經常是因爲String的關係,可以這樣用

        when(mockApplicationContext.getString(R.string.filterOthers))
                .thenReturn("Other");

mock靜態類的靜態方法

在我們測試時經常遇到靜態類的靜態方法無法通過測試,比如TextUtils
其mock順序如下
1.測試類前聲明

@RunWith(PowerMockRunner.class)
@PrepareForTest({TextUtils.class, Xxx.class})
public class Xxx{
}

2.初始化

    @Before
    public void setUp() throws Exception {
        PowerMockito.mockStatic(TextUtils.class);
    }

3.在具體的測試方法靈活使用mockito的when方法
比如

        when(TextUtils.isEmpty(price.getType()))
                .thenReturn(price.getType().length() == 0);

測試方法的順序

我們寫測試方法時經常會遇到方法A調用B 方法B調用方法C的情況比如

		if(flag1 == true){
			methodA();
		}else{
			methodB(key);
		}
		
		methodA(){
			if(flag2 == true){
				methodC();
			}else{
				methodD();
			}
		}
		
		methodB(key){
			switch (key) {
			case a:
				methodE();
				break;
			case b:
				methodF();
				break;
			case c:
				methodG();
				break;
			default:
				break;
			}
		}

那麼我們寫測試方法的順序從末端的方法寫會容易一些,比如上面這個例子我們寫的順序是EFG CD AB(組內順序不區分)
當然如果寫測試方法寫的多了應該知道爲方法A寫測試方法時只要把兩個分支都測了就OK了其實與方法內部調用的方法C和方法D沒有關係。但是對於剛接觸單元測試的我來說,這樣寫感覺上簡單一些哈哈。

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