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