文档章节

Android studio 使用心得(八)----测试程序单元测试

veidy
 veidy
发布于 2015/03/05 15:51
字数 1300
阅读 462
收藏 9
点赞 0
评论 0

   一直想系统专业的了解测试这一块,但是工作过的公司都没有,都是程序员做完了就扔给测试MM直接测,MM也就只是按照需求文档点,也就没有了所谓的单元测试,功能测试。

  这里写一个简单的单元测试 ,体验下,我相信好多朋友跟我一样,知道单元测试这个名字,但是真要做,不知怎么开始,所以跟大家分享下

  一个登录界面,测试点击登录按钮后是否能正常跳转到首页(是不是觉得有点无聊....) 初次体验下android 的 单元测试

准确的说应该是activity的单元测试

 

先看目录结构. 来给LoginActivity写一个单元测试,新建一个类,我这叫LoginPresenterTest,然后继承ActivityUnitTestCase

 

 2当我们继承ActivityUnitTestCase后,要重写的方法不能少setUp(),还有一个很重要的地方,空的构造方法,然后 super(LoginActivity.class); 这里如果不这样弄,测试运行就会报错

 

3.由于继承ActiviUnitTestCase的Activity不会被Android自动启动的。要单独启动Activity,你需要显式的调用startActivity()方法,并传递一个Intent来启动你的目标Activity

所以先全局的定义一个Intent 然后在setUp()这个初始化方法里面

mLoginIntent = new Intent(getInstrumentation().getTargetContext(), LoginActivity.class);

这个时候我们先不急着调startActivity();

4,现在就可以开始写测试方法了,我想测试一下Button上的文字是不是我想要的。我们写一个test开头的方法名testLoginButton_labelText(),上面加上注解@MediumTest

(PS:只需要几毫秒的时间的应该被标记为@SmallTest,长时间运行的测试(100毫秒或更多)通常被标记为@MediumTest,@LargeTest,主要取决于测试访问资源在网络上或在本地系统。 )

所以我们这里@MediumTest

来,继续,大家看这个方法里面第一句,就是启动activity。  

 startActivity(mLoginIntent, null, null);

然后就是通过findViewByid找到Button.

 final Button loginButton = (Button) getActivity().findViewById(R.id.btn_login);

然后就是从String获取到你觉得Button上的labe

  final String buttontext = getActivity().getString(R.string.btn_login);

最后对比这个值

  assertEquals("Unexpected button ladel text", buttontext, loginButton.getText());

准备就绪,我们来运行。

鼠标定位到这个方法名上,点击右键-->Run()-->选择小机器人

 

然后就跟正常run一样,等待,最后成功就会出现passed

 

因为String里面<string name="btn_login">登录</string> 我的Button

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/et_password"
        android:layout_margin="10dp"
        android:text="@string/btn_login"/>

也是引用的这个btn_login。所以肯定对比是成功的

继续,假如不一样呢,请看,我换一个值去对比  <string name="title_activity_login">LoginActivity</string>.这肯定不一样

 

一样的,我们在方法名testLiginButton_labelText()上右键,直接Run(因为之前已经run过一次,所以这一次不会再有小机器人选)

然后等待结果

 

是不是觉得比成功要有成就感,因为通过测试发现问题了。。。

Unexpected button ladel text expected:<LoginActivity> but was:<登录>

 

好吧,我们再来玩一个。

现在我想测试点击登录按钮后,正常跳转到另外一个Activity

一样的写一个方法,方法名test开头testLoginActivityMoveToIndex();注解别忘记加了

 

方法里面第一句还是一样的,启动activity

  startActivity(mLoginIntent, null, null);

然后找到Button

   final Button loginButton = (Button) getActivity().findViewById(R.id.btn_login);

再然后 我们可以用performClick()来模拟点击事件

  loginButton.performClick();   

得到跳转后的Intent

final Intent loginIntent = getStartedActivityIntent();    

去判断是否为空,如果为空就说明跳转失败

 assertNotNull("Intent was null", loginIntent);

 

这一句是判断你在跳转后有没调finish()

 assertTrue(isFinishCalled());

 

再回头看看LoginActivity里面Button监听器里面的代码

大家可以先把finish()这个方法注释掉,体验下报错

然后回来测试的方法右键,一样的运行,等待结果

 

如果注掉finish().就会测试出错误

.我们直接点击报错的地方,会定位到哪测试报错

很明显就是因为我们在跳转后没有finish(),但是测试方法里面我们有去测试是否有调   assertTrue(isFinishCalled());

,如果加上在LoginActivity里面加上finish(),那就会成功没问题了.

 

 

好了,这篇文章就是体验下所谓的Android单元测试。我会继续学习下去,便跟大家一起分享。之前学习MVP模式的时候,都说MVP模式的一个优点就是方便单元测试,所以我直接在MVPDemo 这个项目上写的例子,可是我现在还没有体会到这个优点,我现在就是想像web里面的ut测试一样,写一个方法,然后直接运行这个方法得到结果,这样我觉得MVP方便单元测试这个优点就真的突显极致了。 我也是一直在摸索中。希望大家能多多指点。

源码在这MVPDemoTest(链接: http://pan.baidu.com/s/1nturpih 密码: apxp)

 

今天元宵节,公司四点下班,大家元宵节快乐!!!

© 著作权归作者所有

共有 人打赏支持
veidy

veidy

粉丝 130
博文 46
码字总数 18176
作品 0
深圳
程序员
[Android学习十一]Android开发单元测试

网上关于Android单元测试的文字帖子不胜枚举,看完之后能解决问题是好事,不能解决问题那就是浪费时间和经历。大多数文章来自于这篇文章:http://rexstjohn.com/unit-testing-with-android-...

secondriver
06/26
0
0
android studio基本使用零碎整理

android studio进行单元测试:http://jingyan.baidu.com/article/454316ab7a5711f7a7c03a9a.html AndroidStudio怎样导入jar包:http://jingyan.baidu.com/article/e6c8503c7190b7e54f1a1893......

智能小松鼠
2015/07/03
0
0
Android studio 使用心得(十)---android studio 多渠道打包(三)

关于使用android studio 如何打包 大家可以看这两篇文章 Android studio 使用心得(四)---android studio 多渠道打包 Android studio 使用心得(四)---android studio 多渠道打包(二) 真正的项...

veidy
2015/07/28
0
0
Android Studio应用添加KeyMob广告管理库详细教程

一、创建新项目 在此步骤中,我们将在 Android Studio 中创建一个全新的项目,以在示例中使用。如果您尚未运行 Studio,现在请将其打开。 1:开始新项目向导 如果您看到上面的欢迎屏幕,请选择...

大街小巷
2015/11/18
0
0
Android 单元测试链接整理

Android单元测试 http://blog.csdn.net/stevenhu223/article/details/8298858 通过JUnit进行Android单元测试:http://www.open-open.com/lib/view/open1328152424546.html 如何进行Android单......

智能小松鼠
2014/12/16
0
0
Testing和Instrumentation

Android提供了一系列强大的测试工具,它针对Android的环境,扩展了业内标准的JUnit测试框架。尽管你可以使用JUnit测试Android工程,但Android工具允许你为应用程序的各个方面进行更为复杂的测...

AlexMahoneFBI
2014/10/13
0
0
Android UnitTest

Android 的单元测试感觉比java的单元测试更难一些(可能是因为我比较菜...),我想很多小伙伴也是这么认为的吧, 现在做Android开发,大部分的人都是直接就开搞, 不管它三七二十一,先把功能实现再...

柳絮飘飞
2015/03/11
0
0
最佳Android模拟器,你值得拥有

Android是使用最为广泛的开源手机操作系统,在全球有超过十亿的Android设备被激活——我们需要在这些设备进行实验,来确保应用程序的安全性和可用性。在Google Play Store中提供了1500多万可...

Miss_Hello_World
2015/08/25
0
0
对Android应用进行单元测试

在实际开发中,开发android软件的过程需要不断进行测试,使用Junit测试框架,是正规Android开发的必用技术,在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性。 第一步:首先...

罗荣熙
2012/11/07
0
0
Android开发、测试持续集成环境Jenkins搭建

传统java项目开发都会利用maven、ant在hudson、jenkins中持续集成,开发、测试、每日构建,保证代码质量。maven默认不支持android,但是我们可以利用maven-android-plugin插件来让maven支持a...

youthflies
2013/09/28
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部