android异步如何测试,java异步调用框架 Android单元测试研究与实践(3)

Robolectric 2.4模拟网络请求

由于商业App的多数Activity界面数据都是通过网络请求获取,因为网络请求是大多数App首要处理的模块,测试依赖网络数据的Activity时,可以在@Before标记的函数中准备网络数据,进行网络请求的模拟。准备网络请求的代码如下:

publicvoidprepareHttpResponse(StringfilePath)throwsIOException{

StringnetData=FileUtils.readFileToString(FileUtils.

toFile(getClass().getResource(filePath)),HTTP.UTF_8);

SystemFlow.gif

Robolectric.setDefaultHttpResponse(200,netData);

}//代码适用于Robolectric 2.4,3.0需要注意网络请求的包的位置

由于Robolectric 2.4并不会发送网络请求,因此需要本地创建网络请求所返回的数据,上述函数的filePath便是本地数据的文件的路径,setDefaultHttpResponse()则创建了该请求的Response。上述函数执行后,单元测试工程便拥有了与本地数据数据对应的网络请求,在这个函数执行后展示的Activity便是有数据的Activity。

在Robolectric 3.0环境下,单元测试可以发真的请求,并且能够请求到数据,本文依旧建议采用mock的办法构造网络请求,而不要依赖网络环境。

Activity展示测试与跳转测试

创建网络请求后,便可以测试Activity了。测试代码如下:

@Test

publicvoidtestSampleActivity(){

SampleActivity sampleActivity=Robolectric.buildActivity(SampleActivity.class).

create().resume().get();

assertNotNull(sampleActivity);

assertEquals("Activity的标题",sampleActivity.getTitle());

}

Robolectric.buildActivity()用于构造Activity,create()函数执行后,该Activity会运行到onCreate周期,resume()则对应onResume周期。assertNotNull和assertEquals是JUnit中的断言,Robolectric只提供运行环境,逻辑判断还是需要依赖JUnit中的断言。

Activity跳转是Android开发的重要逻辑,其测试方法如下:

@Test

publicvoidtestActivityTurn(ActionBarActivity firstActivity,ClasssecondActivity){

Intent intent=newIntent(firstActivity.getApplicationContext(),secondActivity);

assertEquals(intent,Robolectric.shadowOf(firstActivity).getNextStartedActivity());//3.0的API与2.4不同

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-73452-3.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值