Robolectric 2.4模拟网络请求
由于商业App的多数Activity界面数据都是通过网络请求获取,因为网络请求是大多数App首要处理的模块,测试依赖网络数据的Activity时,可以在@Before标记的函数中准备网络数据,进行网络请求的模拟。准备网络请求的代码如下:
publicvoidprepareHttpResponse(StringfilePath)throwsIOException{
StringnetData=FileUtils.readFileToString(FileUtils.
toFile(getClass().getResource(filePath)),HTTP.UTF_8);
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