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 条评论
 下一页
 为你推荐
 查看更多
    
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 