在使用Android Studio创建项目时,Android Studio一般都会自动创建测试相关的包名和类,可见测试在Android Studio开发中具有很重要的地位了,但我却从来没有使用过。

今天抽空看了一下Android中现在使用的测试框架Testing Support Library,

其中的Espresso的API是非常友好,且易于使用的。

为了练习使用Espresso进行UI测试,我实现了一个简单的登录界面作为被测试功能。

实现登录功能

创建一个LoginActivity, 输入用户名和密码,然后点击登录按钮跳转

到MainActivity,在MainActivity中显示“登录成功”或“登录失败”。

LoginActivity

@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.btnLogin:

Intent intent = new Intent(this,MainActivity.class);

intent.putExtra("name",edtName.getText().toString().trim());

intent.putExtra("pwd",edtPwd.getText().toString().trim());

startActivity(intent);

break;

}

}

MainActivity

public static final String NAME = "android";

public static final String PWD = "123456";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView tvLoginResult = (TextView) findViewById(R.id.tvLoginResult);

String name = getIntent().getStringExtra("name");

String pwd = getIntent().getStringExtra("pwd");

if (NAME.equals(name) && PWD.equals(pwd)) {

tvLoginResult.setText("登录成功");

} else {

tvLoginResult.setText("登录失败");

}

}

配置Espresso

打开APP Module中得build.gradle文件,在dependencies中加入:

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

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

在android.defaultConfig中加入:

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

添加测试类

在测试的package中创建LoginTest测试类, 我分别使用了正确和错误的密码进行测试,检查结果是否与预期的一致。

我的结果在另一个Activity中,Espresso可以直接跨Activity检查,不需要知道跳转关系。

@RunWith(AndroidJUnit4.class)

@LargeTest

public class LoginTest {

@Rule

public ActivityTestRule mActivityRule = new ActivityTestRule<>(

LoginActivity.class);

@Test

public void loginWithWrongPassword(){

onView(withId(R.id.edtName)).perform(typeText("android"), closeSoftKeyboard());

onView(withId(R.id.edtPwd)).perform(typeText("wrong"),closeSoftKeyboard());

onView(withId(R.id.btnLogin)).perform(click());

onView(withId(R.id.tvLoginResult)).check(matches(withText("登录失败")));

}

@Test

public void loginWithRightPassword(){

onView(withId(R.id.edtName)).perform(typeText("android"), closeSoftKeyboard());

onView(withId(R.id.edtPwd)).perform(typeText("123456"),closeSoftKeyboard());

onView(withId(R.id.btnLogin)).perform(click());

onView(withId(R.id.tvLoginResult)).check(matches(withText("登录成功")));

}

目前只是初步使用Espresso,以后还需要在实际项目中逐渐加入Espresso测试,在实战中把它用起来。

参考

android espresso跨程序,Android中使用Espresso进行UI测试相关推荐

  1. android espresso跨程序,Android Espresso:依次运行多个测试

    我正在尝试使用Espresso for Android进行一系列测试.运行之间似乎没有关闭活动.一次测试后,无论应用程序状态如何,左侧为下一次测试. 如何用Espresso来实现? 错误报告中提供的修 ...

  2. Android Studio中进行单元测试和UI测试

    目录 在Android Studio中进行单元测试和UI测试 - 1.概述 在Android Studio中进行单元测试和UI测试 - 2.创建新的Android Studio工程 在Android ...

  3. android espresso跨程序,在Espresso Android中正确使用IdlingResource的方法

    我正在用Espresso编写UI测试.应用程序与服务器紧密配合,因此在许多情况下,我需要等待任意一个值进行计算,或者获取和显示数据.Espresso建议使用IdlingResource. 我的Idli ...

  4. android studio 跨进程,Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用...

    本文首发于微信公众号「后厂技术官」 在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messeng ...

  5. nova launcher_如何使用Nova Launcher从Android的应用程序抽屉中隐藏应用程序

    nova launcher Not every app deserves a spot in your app drawer. Maybe there are some built-in apps y ...

  6. android 进程 应用程序,Android中的每个活动都是一个进程,或者一个应用程序是一个进程...

    All activities inside an application run in one process? 这取决于应用程序清单中android:process属性的值. 如果没有为清单中的应用 ...

  7. android系统应用程序,Android系统应用程序基本概念解读

    经常关注我们51CTO的朋友们应该知道,在以前的文章中我们对Android这一手机系统有一个详细的跟踪介绍,方便大家学习应用这一新的功能强大的开源手机系统,比如对Android源码的编译的解析的解析等 ...

  8. android小闹钟程序,Android实现闹钟小程序.pdf

    Android实实现现闹闹钟钟小小程程序序 这篇文章主要为大家详细介绍了Android实现闹钟小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近写了 闹钟的程序,看到SharedPrefe ...

  9. android 基础应用程序,android应用程序基本实现(基础篇).ppt

    <android应用程序基本实现(基础篇).ppt>由会员分享,可在线阅读,更多相关<android应用程序基本实现(基础篇).ppt(22页珍藏版)>请在人人文库网上搜索. ...

最新文章

  1. sklearn随机森林分类类RandomForestClassifier
  2. php邮件加密,怎样对邮件正文分段加密及解密解决思路
  3. Webstorm中提示Can't use Subversion command line
  4. php sockent通信
  5. docker 必然用到的一些指令
  6. mysql的查询语句怎么优化_MySQL查询语句如何优化
  7. case zhen语句_switch case语句,switch case用法详解
  8. word的公式后加编码后自动变小
  9. 【12-05】面试题
  10. 执行cmd命令时:因为在此系统上禁止运行脚本的解决方法
  11. linux系统数据文件和信息--unix环境高级编程读书笔记
  12. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_22-页面查询服务端开发-Dao-基础方法测试...
  13. adobe软件卸载不了怎么办?那就使用dobe官方清理工具吧!
  14. 2019竞赛公开题库c语言,干货!全国电子设计大赛你必知的C语言知识
  15. 现在移动端还用rem吗?nonono
  16. *****DOS·FOR·语句·学习·指南*****
  17. 启明星辰潘柱廷:信息安全市场的战国春秋与陆地海洋观
  18. 手游传奇刷元宝_传奇手游如何刷元宝
  19. 矩型窗、哈明窗、汉宁窗、莱克曼窗等一系列函数
  20. Terracotta Server集群

热门文章

  1. jdk1.8新特性:stream流 报错:stream has already been operated upon or closed
  2. DSPE-PEG-TH(AGYLLGHINLHHLAHL(Aib)HHIL) 磷脂(二硬脂酰基磷脂酰乙醇胺)-聚乙二醇-TH(AGYLLGHINLHHLAHL(Aib)HHIL)
  3. 迅雷极速版 win10 奔溃、闪退,官方补丁无法安装解决办法
  4. 用linux云服务器搭建自己的网站
  5. 6s测试信号软件,手机信号强度测试:苹果iPhone 6s不敌三星S6
  6. FX3学习笔记2-cs-make[1]: [post-build] Error 2 (ignored)
  7. Python工具函数
  8. 用html和css制作日历,CSS3制作日历
  9. PyCharm创建app的两种方式
  10. MapReduce各个执行阶段