Android下Mockito配合单元测试的使用
2016-04-30 本文已影响334人
liucloo
2016年4月11日
[TOC]
1、引入Mockiteo
构建系统选择Gradle,引入Jcenter库的Mockito,在模块dependencies加入testCompile "org.mockito:mockito-core:1.10.19"
2、入门示例
1、为get方法设置属性
Mockiteo无法为final static private修饰的方法设置属性。Mockiteo可以为有返回值的方法设置返回值。
@Test
public void Testing() throws Exception {
List mock = Mockito.mock(List.class);
//模拟返回值
Mockito.when(mock.get(0)).thenReturn(person1);
System.out.println(mock.get(0).toString());
}
结果
Person{username='liucl', age=123}
2、查看方法有没有执行
@Test
public void methodInvokeTimeTest3() throws Exception{
Person mock = Mockito.mock(Person.class);
mock.setAge(123);
mock.setAge(123);
mock.setAge(123);
Mockito.verify(mock).setAge(123);//执行过了
Mockito.verify(mock,Mockito.times(3)).setAge(123);//执行三次
Mockito.verify(mock,Mockito.atLeast(2)).setAge(123); //至少两次
}
通过Mockito的verify的方法可以验证mock类的方法有么有执行,执行过多少次。
当然你也可以模糊匹配
@Test
public void argumentMatcherTest2() throws Exception{
//验证Map
Map<Integer,String> map = Mockito.mock(Map.class);
Mockito.when(map.put(Mockito.eq(1),Mockito.anyString())).thenReturn("String"); //把Mockito.eq(1)换成1会报错
map.put(1,"2");
Mockito.verify(map);
}
这里用一个Map,模糊匹配他的key,这里不能直接写1,会报错。应该写Mockito.eq(1)
3、监视无返回值的方法
在上面1中,通过when来为有返回值的方法设置返回值。那么这里来监视无返回值的方法执行情况
@Test
public void mockTest2() throws Exception{
List mock = Mockito.mock(List.class);
Mockito.doNothing().when(mock).clear();
mock.clear();
mock.clear();
Mockito.verify(mock,Mockito.times(2)).clear();
}
上面监视List的clear方法执行情况。