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沒有關係。但是對於剛接觸單元測試的我來說,這樣寫感覺上簡單一些哈哈。