Android 测试
2018-05-04 18:44:28 16 举报
AI智能生成
Android 单元测试 Junit Rxjava Mock
作者其他创作
大纲/内容
数据库测试
依赖 Context
@RunWith(AndroidJUnit4.class)
@LargeTest
@LargeTest
InstrumentationRegistry.getTargetContext()
导出
adb pull /data/data/com.mayunfei.downloadmanager/databases/units.db ~/test
adb 需要显示的切换到 root
adb root 命令
多线程测试
Junit
注解
@Test
要走测试
异常测试
@Test(expected = IllegalArgumentException.class)
抛出异常则为通过
@Test(expected = IllegalArgumentException.class)
抛出异常则为通过
@Before
每个被标记@Test 注解的测试
调用前都会 先执行 @Before 注解的方法
调用前都会 先执行 @Before 注解的方法
@After
每个被标记@Test 注解的测试
调用结束之后 都会执行 @After 注解的方法
调用结束之后 都会执行 @After 注解的方法
@Ignore
被 @Ignore 标记的方法,在执行测试类是会忽略
对接口的测试用例 需要 标记 @Ignore
对接口的测试用例 需要 标记 @Ignore
@Rule
定义
一个JUnit Rule就是一个实现了TestRule的类,这些类的作用类似于@Before、@After,是用来在每个测试方法的执行前后执行一些代码的一个方法。
一个JUnit Rule就是一个实现了TestRule的类,这些类的作用类似于@Before、@After,是用来在每个测试方法的执行前后执行一些代码的一个方法。
拓展
可以自定义一个 Rule 用于接口之前的登录获取 token
可以自定义一个 Rule 用于接口之前的登录获取 token
自己实现一个定制的 Rule
https://gist.github.com/MaYunFei/8563a820cf5c2ab515d13418b72bb360
常用方法
静态引入
import static org.junit.Assert.*;
assert方法
assertEquals
assertThat
需要用到其他 jar 包
assertTrue(boolean condition)
验证contidion的值是true
验证contidion的值是true
assertFalse(boolean condition)
验证contidion的值是false
验证contidion的值是false
assertNull(Object obj)
验证obj的值是null
验证obj的值是null
assertNotNull(Object obj)
验证obj的值不是null
验证obj的值不是null
assertSame(expected, actual)
验证expected和actual是同一个对象,即指向同一个对象
验证expected和actual是同一个对象,即指向同一个对象
assertNotSame(expected, actual)
验证expected和actual不是同一个对象,即指向不同的对象
验证expected和actual不是同一个对象,即指向不同的对象
异常测试方法
异常测试
@Test(expected = IllegalArgumentException.class)
抛出异常则为通过
@Test(expected = IllegalArgumentException.class)
抛出异常则为通过
Mock
创建Mock 对象
代码创建
YourClass yourInstance = Mockito.mock(YourClass.class);
注解
@Mock
用@Mock标记要创造的虚假对象
注入方式
MockitoAnnotations.initMocks(this);
使用 Junit Rule 方式
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
public MockitoRule mockitoRule = MockitoJUnit.rule();
常用方法
验证某个方法调用
Mockito.verify(objectToVerify).methodToVerify(arguments);
objectToVerify和methodToVerify分别是你想要验证的对象和方法。
验证调用次数
固定次数
Mockito.verify(objectToVerify, Mockito.times(3)).methodToVerify(...);
最多,最少,没有
atMost(count), atLeast(count), never()
调用参数的判断
很多时候你并不关心被调用方法的参数具体是什么,或者是你也不知道,你只关心这个方法得到调用了就行。这种情况下,Mockito提供了一系列的any方法,来表示任何的参数都行:
Mockito.verify(mockUserManager).performLogin(Mockito.anyString(), Mockito.anyString());
anyString anyInt anyLong anyObject
any(clazz) anyCollection,anyCollectionOf(clazz), anyList(Map, set), anyListOf(clazz)
指定mock对象的某些方法的行为
When ThenReturn 语法
Mockito.when(mockObject.targetMethod(args)).thenReturn(desiredReturnValue);
//当调用mockValidator的verifyPassword方法,同时传入"xiaochuang_is_handsome"时,返回true
Mockito.when(mockValidator.verifyPassword("xiaochuang_is_handsome")).thenReturn(true);
Mockito.when(mockValidator.verifyPassword("xiaochuang_is_handsome")).thenReturn(true);
RxJava
test() "operator"
Flowable.range(1, 5)
.test()
.assertResult(1, 2, 3, 4, 5)
.test()
.assertResult(1, 2, 3, 4, 5)
线程切换
RxJavaPlugins.reset();
RxAndroidPlugins.reset();
RxJavaPlugins.setIoSchedulerHandler(scheduler -> Schedulers.trampoline());
RxJavaPlugins.setComputationSchedulerHandler(scheduler -> Schedulers.trampoline());
RxJavaPlugins.setNewThreadSchedulerHandler(scheduler -> Schedulers.trampoline());
RxAndroidPlugins.setInitMainThreadSchedulerHandler(schedulerCallable -> Schedulers.trampoline());
RxAndroidPlugins.setMainThreadSchedulerHandler(scheduler -> Schedulers.trampoline());
RxAndroidPlugins.reset();
RxJavaPlugins.setIoSchedulerHandler(scheduler -> Schedulers.trampoline());
RxJavaPlugins.setComputationSchedulerHandler(scheduler -> Schedulers.trampoline());
RxJavaPlugins.setNewThreadSchedulerHandler(scheduler -> Schedulers.trampoline());
RxAndroidPlugins.setInitMainThreadSchedulerHandler(schedulerCallable -> Schedulers.trampoline());
RxAndroidPlugins.setMainThreadSchedulerHandler(scheduler -> Schedulers.trampoline());
0 条评论
下一页