文档章节

在Android Studio中使用Roboletric和Espresso

IT追寻者
 IT追寻者
发布于 2016/06/21 13:02
字数 841
阅读 80
收藏 1

0. 前言

在Android开发中,测试是一个很少被提及的话题。在早期,Android并没有一个很好 的测试框架,你也很难找到一个测试全面的优秀开源项目。近些年,随着Android社区的成熟,出现了诸如Robotium,Robolectric等的 优秀测试框架。而Google也在近期推出了自己的UI测试框架Espresso。

本文基于最简单的Hello World项目进行测试,重点在于介绍Robolectric和Espresso的配置.。项目完整的示例代码在这里

1. 使用Espresso进行Instrumentaion Test

首先创建一个最简单的Android项目,包含一个Hello World的TextView。打开Build Variant,选择Android Instumentation Tests。在build.gradle中配置Espresso,增加的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

apply plugin: 'com.android.application'

 

android {

    ...

    defaultConfig {

        ...

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

     

    packagingOptions {

        exclude 'LICENSE.txt'

    }

}

 

dependencies {

    ...

    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.1'

    androidTestCompile 'com.android.support.test:runner:0.2'

}


之后点击Gradle同步。

 

到src/androidTest删除自动生成的ApplicationTest.java,新建MainActivityTest.java如下。这段代码主要是测试Hello world!这段文字是否显示到了界面上。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

@LargeTest

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {

 

    public MainActivityTest() {

        super(MainActivity.class);

    }

 

    @Override

    public void setUp() throws Exception {

        super.setUp();

        getActivity();

    }

 

    public void testHelloWorldOnView() {

        onView(withText("Hello world!")).check(matches(isDisplayed()));

    }

 

}

 

右击MainActivityTest.java,选择Run,如下图所示。



选择运行的设备之后可以到在下方控制台看到打印的测试成功信息如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Testing started at 下午7:08 ...

Installing me.codethink.testdemo

DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/me.codethink.testdemo"

pkg: /data/local/tmp/me.codethink.testdemo

Success

 

 

Uploading file

    local path: /Users/archie/AndroidStudioProjects/TestDemo/app/build/outputs/apk/app-debug-androidTest-unaligned.apk

    remote path: /data/local/tmp/me.codethink.testdemo.test

Installing me.codethink.testdemo.test

DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/me.codethink.testdemo.test"

pkg: /data/local/tmp/me.codethink.testdemo.test

Success

 

 

Running tests

Test running startedFinish

 

此时到Run -> Edit Configurations查看,可以看到增加了MainActivityTest,如下图所示。

 


至此完成了一个简单的Espresso测试。

 

2. 使用Robolectric进行Test

首先复制androidTest文件夹到同一个目录下,重命名为test。打开Build Variant,选择Unit Tests。



修改build.gradle,增加Robolectric依赖如下。

1

2

3

4

5

6

7

8

9

10

11

{

    ...

    dependencies {

        ...

        testCompile 'junit:junit:4.12'

        testCompile "org.assertj:assertj-core:1.7.0"

        testCompile('org.robolectric:robolectric:3.0-rc2') {

            exclude group: 'commons-logging', module: 'commons-logging'

            exclude group: 'org.apache.httpcomponents', module: 'httpclient'

        }

}

 

删除test目录下的MainActivityTest.java,新建MainActivityUnitTest.java代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@RunWith(RobolectricGradleTestRunner.class)

@Config(constants = BuildConfig.class, emulateSdk = 21)

public class MainActivityUnitTest {

    private MainActivity activity;

 

    @Before

    public void setUp() throws Exception {

        activity = Robolectric.setupActivity(MainActivity.class);

    }

 

    @Test

    public void testHelloWorld() throws Exception {

        TextView helloWorldTextView = (TextView) activity.findViewById(R.id.textview_id);

        assertThat(helloWorldTextView.getText().toString()).isEqualTo("Hello World!");

    }

 

}

 

右键点击test目录下的MainActivityUnitTest.java,选择Run。

 


之后可以在控制台看到测试成功的信息。
此时到Run -> Edit Configurations查看,可以看到增加了MainActivityUnitTest,如下图所示。



把assertThat(helloWorldTextView.getText().toString()).isEqualTo(“Hello world!”)中的world改为World,再次Run改测试,可以在控制台看到错误信息以及生成的错误报告的地址,错报告内容如下图所示:


 

3. 小结

Espresso作为Google推出的Instrumentation UI测试框架,在API支持方面有着天然的优势,在推出后很大程度上替代了Robotium。而Robolectric由于只在Java虚拟机中运行,速 度很快,虽然在API支持上无法和Espresso相比,但速度有很大优势,适合单元测试,尤其是TDD时使用。

本文转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0605/2999.html

共有 人打赏支持
IT追寻者

IT追寻者

粉丝 27
博文 380
码字总数 56535
作品 0
海淀
高级程序员
私信 提问
Android Studio 2.2 的新鲜事

Android Studio 2.2 现在可以下载。Android Studio 2.2 已在 Google I/O 2016 上预展,是全球各地数百万 Android 开发者使用的 IDE 最新版本。 此版本包含增强功能,主要面向三大主题:速度、...

局长
2016/09/24
5.4K
12
Android Studio 2.2 Preview 3 发布

Android Studio 2.2 Preview 3 发布了,该版本新增一些新特性,以及修复 Preview 2 中发现的 Bugs。 以下是该版本值得关注的内容: Espresso Test Recorder Demo of the Espresso Test Recor...

oschina
2016/06/09
3.2K
21
Android Studio 2.2 正式稳定版发布

盼星星望月亮,Android Studio 2.2 正式稳定版终于发布了(喜大普奔)!Android Studio 2.2 在今年的Google I/O上便发布了预览版。 废话少说,来看看正式稳定版更新的内容,本次发布的重点是...

NextLife
2016/09/20
34.9K
71
和 Eclipse Android Developer Tools 说再见……

文|Google Android 产品经理 Jamal Eason 随着 Android Studio 2.2 的发布,现在是时候告别 Eclipse Android Developer Tools 了。我们已正式终止对它们的支持与开发。最佳时机不可错过,赶...

局长
2016/11/15
6.4K
11
Android Studio 3.1 RC 2 发布, Bug 修复

Android Studio 3.1 RC 2 和 Android Studio 3.2 Canary 6 发布了。两个版本都主要修复了存在的 Bug,主要更新内容如下: Android Studio 3.1 RC 2 Issue#73730693: Action search breaks w......

达尔文
2018/03/14
846
2

没有更多内容

加载失败,请刷新页面

加载更多

Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
29分钟前
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0
EOS主网数据同步指南

本文介绍如何安装EOS节点软件并接入EOS主网,主要包括以下内容: 如何安装EOS节点软件 如何配置EOS节点软件接入主网 如何启动EOS节点软件与主网数据同步 如何检查主网数据同步进度 如何正确地...

汇智网教程
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部