我的新浪微博:http://weibo.com/u/1602714773 CSDN博客:http://blog.csdn.net/hunterno4

Robolectric环境搭建——运行RobolectricSample示例工程

上一篇 / 下一篇  2014-03-06 21:57:46 / 个人分类:Robolectric

Robolectric简介

android平台上运行单元测试用例需要真机或模拟器,从构建、部署、到启动应用程序通常需要好几分钟,这对于TDD来说太慢了,也许你尝试过在IDE上直接运行测试用例,但得到的只能是java.lang.RuntimeException: Stub!
而Robolectric正是这样一个允许单元测试直接运行于JVM之上的单元测试框架,无需真机或模拟器,因此大大加快了运行速度。
原理:参考
http://www.infoq.com/cn/articles/android-unit-test

缺点:Robolectric对Android底层的模拟实现还未完全

Robolectric环境准备
预置条件:
1.已安装有android开发环境
2.已安装有maven环境
3.Eclipse已安装有M2Eclipse插件

备注:
环境中,maven版本为3.1.1(需要根据情况更新到新版本);
robolectric包版本为:robolectric-2.2-jar-with-dependencies.jar;
RobolectricSample-master.zip示例工程最好下载最新的;
由于示例工程处于不断改动中,示例工程与robolectric包最好下载同一天最新的,不然很可能出现版本不兼容问题

M2Eclipse推荐安装方式:
插件方式,输入以下地址,最后的kepler为当前的Eclipse版本
http://download.eclipse.org/releases/kepler
搜索框中输入maven搜索

RobolectricSample示例工程

1.下载示例工程https://github.com/robolectric/RobolectricSample
2.命令行下切换到工程目录,执行android update project -p . --target 7
(--target指定android的api level,android list命令可查询)
3.import 导入示例工程
4.配置build path,添加robolectric-***-jar-with-dependencies.jar包;
添加<your android install directory>/add-ons/addon-google_apis-google-**/libs/maps.jar

由于依赖关系,需要适当调整上下位置


5.配置Run Configuration,Right-click -> Run As -> Run Configurations
Tab: Classpath -> User Entries -> Add External JARs ...
找到android.jar


6.运行测试用例;右键点击测试用例,选择Run As -> Junit Test

可以看到80几个用例,仅需要20余秒,运行速度非常地快。


可能遇到的问题:

1.Project build error: Unknown packaging: apk
在Eclipse中安装m2e-android插件

安装源:http://rgladwell.github.com/m2e-android/updates/
安装方法:Help -> Install new Software -> 在出来的对话框中点击 Add ->
Name:m2e-android
Location:http://rgladwell.github.com/m2e-android/updates/
也可以通过:

若m2e装好后仍未解决,检查Maven配置
Windows—>Preferences—>Maven—>User Settings,查看setting.xml
确保这里的Maven不是用的Eclipse自带的,而是本地下载的新版本的Maven

2.示例工程与robolectric包不一致问题
[ERROR] Failed to execute goal com.jayway.maven.plugins.android.generation2:andr
oid-maven-plugin:3.6.1:generate-sources (default-generate-sources) on project ro
bolectricsample: Execution default-generate-sources of goal com.jayway.maven.plu
gins.android.generation2:android-maven-plugin:3.6.1:generate-sources failed: A r
equired class was missing while executing com.jayway.maven.plugins.android.gener
ation2:android-maven-plugin:3.6.1:generate-sources: Lorg/sonatype/aether/Reposit
orySystem;

原因:示例工程与robolectric包不是同一天的,有不兼容问题
解决:下载同一天的,最新版本

3.maven版本不兼容问题
maven clean test时报错,提示需要更新版本的maven

原因:maven版本为3.1.0,版本过低不兼容
解决:下载3.1.1版本

4.导入工程后,pom.xml文件中,以下插件报错
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<sdk>
<!-- platform. or api level (api level 4 = platform. 1.6)-->
<platform>18</platform>
</sdk>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
提示:
Plugin execution not covered by lifecycle configuration:
com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.8.0:consume-aar (execution:
default-consume-aar, phase: compile)
解决:
打开 'Problems'视图: 'Window' -> 'Show View' -> 'Problems'
右键点击报错的地方,选择'Quick Fix'
点击选择'Permanently mark goal generate in pom.xml as ignored in Eclipse build' -> 'Finish' -> 'OK'

修改完后,右键项目—> Maven —> Update Project

5.NoClassDefFoundError
执行用例时,部分可以执行通过,而部分报NoClassDefFoundError错误

原因:NoClassDefFoundError是通过new的形式去生成类实例的,在编译期间是存在的,但是在运行的时候找不到该类。
报错中也指出ClassNotFoundException,class均为android.jar包的
解决:配置Run Configurations,将android.jar包包含进去。
Right-click -> Run As -> Run Configurations
Tab: Classpath -> User Entries -> Add External JARs ...
添加android.jar


TAG: maven Maven 安装 环境搭建 robolectric

 

评分:0

我来说两句

Open Toolbar