Robolectric 环境搭建(Eclipse)

robolectric-官网

Robolectric 官网文档少得可怜,最初使用 Android Studio + Gradle,发现各种坑,最后还是选择 Eclipse + Maven

网上这方面的教程也几乎没有,即使有也是很早之前的。。没办法,只能自己摸索了,庆幸的是对 Instrumentation 比较熟悉,于是尝试着参考建立 Android JUnit 项目的方法来建立 Roboletirc 测试项目,最后是跑通了,这里分享下。

你可能以下面的内容作为参考,去搭建的时候还会遇到些坑,这可能是由于某些地方的环境有差异,可以留言,共同解决!

OK,接下来记录下我在 Mac 上的搭建步骤。其他系统可以参考。

各种软件版本:

JDK:1.8

Maven:3.2.5

Roboletric:3.0-SNAPSHOT

Robolectric 简介

其实很早就知道这个框架,但一直忍着没去碰它,而是选择先去熟悉了下 Instrumentation,这两天才忍不住……

Instrumentation 与 Roboletric 都是针对 Android 进行单元测试的框架,前者在执行 case 时候是以 Android JUnit 的方式运行,因此必须在真实的 Android 环境中运行(模拟器或者真机),而后者则是以 Java Junit 的方式运行,这里就脱离了对 Android 环境的依赖,而可以直接将 case 在 JVM 中运行,大赞~,因此很适合将 Roboletric 用于 Android 的测试驱动开发。

网上其实还是比较多关于 Roboletric 的文章的,但是。。尼玛,里面都是贴点官网的示例代码,对于整个环境的搭建,却没多少提及的。。环境是最主要的,环境 OK 了,示例代码我到官网复制就OK。。

我搭建的过程是单独建立一个 Maven 测试项目,测试项目依赖于 Android 项目,测试项目是与被测项目分离的。下面详细贴下:

新建 Android Project

新建 Android 项目(项目名我取为 roboletric),该项目作为被测对象,这里不帖代码,代码很简单,该示例的主界面是一个 TextView,显示的内容为 Hello world! ,界面中还有一个 Button,点击 Button,TextView 的内容会变为 Hello xuxu ,呵呵。。

具体也可以参考这篇文章的内容: Android Instrumentation 简介

其中我对 sdk 的配置了 min sdk 为 16

<uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="19" />

新建 Test Project

这里我新建了一个 Maven Project

File> New > Other > Maven Project ,跟 Appium 里面使用 Java 写脚本,建立 Maven 项目是相同的。

我建立的测试项目 roboletrictest,pom.xml 的内容我这里贴下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>roboletrictest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>roboletrictest</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.robolectric</groupId>
			<artifactId>robolectric</artifactId>
			<version>3.0-SNAPSHOT</version>
			<scope>test</scope>
		</dependency>

	</dependencies>
</project>

依赖配置成功后会自动添加所有的依赖:

配置 Test Project

配置 roboletrictest 的 Build Path

  • 右键项目(roboletrictest) > Build Path > Configure Build Path
  • 在 Project 选项中 add 被测项目(roboletric)
  • 在 Libraries 中 Add External JARs,添加对应的 android.jar,android.jar 在 sdk 中(需要下载)

完成 Test Case

  • 在 src/test/java 目录下 new 一个 package,对应被测项目(com.example.roboletric.test)
  • 在包里面 new 一个 JUnit Test Case,使用 Junit 4,Class Name 为 MainActivityTest

  • MainActivityTest 的代码:

    package com.example.roboletric.test;
    
    import static org.junit.Assert.*;
    import android.app.Activity;
    import android.widget.Button;
    import android.widget.TextView;
    
    import org.junit.*;
    import org.junit.runner.RunWith;
    import org.robolectric.Robolectric;
    import org.robolectric.RobolectricTestRunner;
    import org.robolectric.annotation.Config;
    
    import com.example.roboletric.MainActivity;
    
    @RunWith(RobolectricTestRunner.class)
    // 设置被测项目的AndroidManifest.xml
    @Config(manifest = "../roboletric/AndroidManifest.xml")
    public class MainActivityTest {
    
    	// 引用待测Activity
    	private Activity mActivity;
    
    	// 引用待测Activity中的TextView和Button
    	private TextView textView;
    	private Button button;
    
    	@Before
    	public void setUp() {
    		// 获取待测Activity
    		mActivity = Robolectric.setupActivity(MainActivity.class);
    
    		// 初始化textView和button
    		textView = (TextView) mActivity.findViewById(com.example.roboletric.R.id.textView);
    		button = (Button) mActivity.findViewById(com.example.roboletric.R.id.button);
    	}
    	
    	//测试初始化条件
    	@Test
    	public void testInit() throws Exception {
    		assertNotNull(mActivity);
    		
    		//判断应用包名
    		assertEquals("com.example.roboletric", mActivity.getPackageName());
    		
    		//判断界面默认显示的内容
    		assertEquals("Hello world!", textView.getText().toString());
    	}
    	
    	//测试button按钮
    	@Test
    	public void testButton() throws Exception {
    		assertNotNull(button);
    		
    		//点击button
    		button.performClick();
    		
    		//判断点击后TextView显示的内容是否改变
    		Assert.assertEquals("Hello xuxu!", textView.getText().toString());
    	}
    }
    

Run Test Case

右键 MainActivityTest > Run As > JUnit Test

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值