单元测试在安卓开发里,普遍被开发者所忽略。今天就讲讲这块吧!
单元测试用的好,开发的效率其实会提高很多。
在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。这是维基百科里关于单元测试的介绍。
而android中的单元测试基于JUnit,可分为本地测试和instrumented测试,在项目中对应
module-name/src/test/java/.
该目录下的代码运行在本地JVM上,其优点是速度快,不需要设备或模拟器的支持,但是无法直接运行含有android系统API引用的测试代码。
module-name/src/androidTest/java/.
该目录下的测试代码需要运行在android设备或模拟器下面,因此可以使用android系统的API,速度较慢。
另外就是三方的测试框架了
常用的android测试框架有以下几个:
JUnit4
AndroidJUnitRunner
Mockito
Espresso
这里说书Mockito吧,其他的没用过,可以自行百度学习。
Mocktio 的GitHub地址如下:
Mock对象,模拟控制其方法返回值,监控其方法的调用等。
首先添加依赖
testImplementation ‘org.mockito:mockito-core:2.19.0’
Example
import static ;
import static org.junit.Assert.;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.;
import static org.mockito.internal.verification.VerificationModeFactory.atLeast;
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Mock
MyClass test;
@Test
public void mockitoTestExample() throws Exception {
//可是使用注解@Mock替代
//MyClass test = mock(MyClass.class);
// 当调用test.getUniqueId()的时候返回43
when(test.getUniqueId()).thenReturn(18);
// 当调用test.compareTo()传入任意的Int值都返回43
when(test.compareTo(anyInt())).thenReturn(18);
// 当调用test.close()的时候,抛NullPointerException异常
doThrow(new NullPointerException()).when(test).close();
// 当调用test.execute()的时候,什么都不做
doNothing().when(test).execute();
assertThat(test.getUniqueId(), is(18));
// 验证是否调用了1次test.getUniqueId()
verify(test, times(1)).getUniqueId();
// 验证是否没有调用过test.getUniqueId()
verify(test, never()).getUniqueId();
// 验证是否至少调用过2次test.getUniqueId()
verify(test, atLeast(2)).getUniqueId();
// 验证是否最多调用过3次test.getUniqueId()
verify(test, atMost(3)).getUniqueId();
// 验证是否这样调用过:test.query("test string")
verify(test).query("test string");
// 通过Mockito.spy() 封装List对象并返回将其mock的spy对象
List list = new LinkedList();
List spy = spy(list);
//指定spy.get(0)返回"Jdqm"
doReturn("Jdqm").when(spy).get(0);
assertEquals("Jdqm", spy.get(0));
}使用Mock的目的主要有以下两点:
1,验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等。
2,指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作。
Mockito是优秀的mock框架之一,使用该框架可以使mock的操作更加简单,直观。
















