Android 单元测试之Espresso - Google官方UI测试框架

原创 2016年08月29日 09:02:39

Android 单元测试之Espresso - Google官方UI测试框架

Android 单元测试之JUnit和Mockito
Android 单元测试之Roboletric 环境配置
Android 单元测试之Roboletric的简单使用
Android 单元测试之Roboletric RxJava、Retrofit、访问真实网络、虚拟服务器
Android 单元测试之Espresso - Google官方UI测试框架

Espresso是Google官方推出的Instrumentation UI测试框架,在API支持方面有着天然的优势,在推出后很大程度上将替代Robotium。
Espresso官方文档

配置

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
    }
    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

dependencies {
    ...
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
        exclude module: 'support-annotations'
        exclude module: 'design'
        exclude module: 'recyclerview-v7'
        exclude module: 'support-v4'
    }
    androidTestCompile ('com.android.support.test.espresso:espresso-idling-resource:2.2.2') {
        exclude module: 'support-annotations'
    }
    compile 'com.android.support:design:24.1.1'
}

构建时,可能会出现annotations 相关报错,加上下面的就好

android {
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-annotations:23.0.1'
    }
}

原因是目前 Espresso 对Android 部分代码只支持到 23.0.1 而我们项目中有些android版本为23.1.1,所以出现了报错

最简单的使用

新建布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/greet_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="greet"
        android:text="@string/greet" />

    <TextView
        android:id="@+id/greeting"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="28sp" />
</LinearLayout>  

新建Activity

public class MainActivity extends AppCompatActivity {

    private TextView greetingView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle(R.string.app_name);

        greetingView = (TextView) findViewById(R.id.greeting);
    }

    public void greet(View v) {
        greetingView.setText(R.string.hello);
    }
}  

新建单元测试

在androidTest中新建

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
    @Rule
    public ActivityTestRule<MainActivity> activityRele = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void greet() {
        onView(withId(R.id.greeting)).check(matches(withText("")));

        onView(withId(R.id.greet_button)).check(matches(withText(R.string.greet))).perform(click());

        onView(withId(R.id.greeting)).check(matches(withText(R.string.hello)));
    }

    @Test
    public void toolbarTitle() {
        CharSequence title = InstrumentationRegistry.getTargetContext().getString(R.string.app_name);
        matchToolbarTitle(title);
    }

    private static ViewInteraction matchToolbarTitle(CharSequence title) {
        return onView(isAssignableFrom(Toolbar.class))
                .check(matches(withToolbarTitle(is(title))));
    }

    private static Matcher<Object> withToolbarTitle(final Matcher<CharSequence> textMatcher) {
        return new BoundedMatcher<Object, Toolbar>(Toolbar.class) {
            @Override
            public boolean matchesSafely(Toolbar toolbar) {
                return textMatcher.matches(toolbar.getTitle());
            }

            @Override
            public void describeTo(Description description) {
                description.appendText("with toolbar title: ");
                textMatcher.describeTo(description);
            }
        };
    }
}

然后,运行,发现测试通过

其他

源码Demo

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android Espresso单元测试

Espresso介绍在Android单元测试中,谷歌官方推荐使用Espresso框架,根据谷歌官方介绍,Espresso的最关键的优势就是它能自动同步模拟行为对UI的测试,它能够检测到主线程空闲状态的...
  • xuguoli_beyondboy
  • xuguoli_beyondboy
  • 2016年01月07日 15:17
  • 3552

Espresso ui单元测试框架初探

Espresso是google出的一款UI单元测试的框架。 首先配置下gradle: defaultConfig中配置testImstrumentationRunner:testInstrumen...
  • dashentao1989
  • dashentao1989
  • 2016年02月26日 18:12
  • 788

5个最佳的Android测试框架(带示例)

谷歌的Android生态系统正在不断地迅速扩张。有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸、ROM /固件、芯片组以及等等等等,层出不穷。于是乎,对于Android开发人员而言...
  • xiaoyida11
  • xiaoyida11
  • 2016年08月15日 09:57
  • 3592

Android UI性能优化 检测应用中的UI卡顿

本文已在我的公众号hongyangAndroid首发。 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/586263...
  • lmj623565791
  • lmj623565791
  • 2017年03月01日 08:28
  • 28770

Android学习笔记:对Android应用进行单元测试

第一步:在AndroidManifest.xml中加入如下两段代码:
  • duancanmeng
  • duancanmeng
  • 2012年04月13日 17:52
  • 41723

Android UI测试之Espresso使用

暑假实习的单位,被分到了一个测试组,因为我是搞android开发的,所以被分到了自动化测试小组,所以了解了一些UI自动化测试。主要就是看了下官方文档关于UI自动haul测试的介绍以及一些框架,比如Ap...
  • qq_19431333
  • qq_19431333
  • 2017年09月12日 10:08
  • 429

在Android Studio中进行单元测试和UI测试

听说不会单元测试的Android程序员不是一个合格的程序员,,好吧,虽然学习Android好久,最近在使用AndroidStudio,但不知道AndroidStudio自带单元测试功能,今天了解了一下...
  • u010980446
  • u010980446
  • 2016年07月12日 17:05
  • 2670

Android UI测试-Espresso环境搭建及测试(by 星空武哥)

转载请标注原创地址: 想看更多是文章,请关注我的微信 espresso是谷歌提倡的ui测试框架,他使用很方便,所以今天给大家写这篇文章,并简单的介绍他的使用,之后我还会介绍Appium测试...
  • lsyz0021
  • lsyz0021
  • 2016年11月03日 01:07
  • 1082

几种常见的Android自动化测试框架及其应用

几种常见的Android自动化测试框架及其应用
  • u010375364
  • u010375364
  • 2016年09月03日 18:28
  • 3600

Android Espresso 测试框架探究

1 简介Espresso 是谷歌官方实现的一个测试框架,根据官方文档,该框架主要能实现如下的功能。 查找一个view是否显示 在一个view上触发一个动作 查询一个view中是否符合一个断言 ...
  • weijianfeng1990912
  • weijianfeng1990912
  • 2016年05月30日 19:33
  • 5595
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 单元测试之Espresso - Google官方UI测试框架
举报原因:
原因补充:

(最多只允许输入30个字)