2019独角兽企业重金招聘Python工程师标准>>>

一直想系统专业的了解测试这一块,但是工作过的公司都没有,都是程序员做完了就扔给测试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)

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

转载于:https://my.oschina.net/aibenben/blog/383068

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

  1. Android studio 使用心得(三)—从Eclipse迁移到Android studio

    断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功 ...

  2. Android studio 使用心得(六)---android studio 如何加载.so文件

    2019独角兽企业重金招聘Python工程师标准>>> 之前一直没怎么注意,以为.so文件android为像eclipse一样直接加载,但是直到昨天我在android studio上 ...

  3. Android studio使用心得(二)— 打包签名apk发布

    1.-–Android Studio菜单   Build->Generate Signed APK 2.--Create new.. 3.---跟eclipse里面一样,添加keystore 信 ...

  4. (转)Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...

  5. android studio 链接编辑,Android Studio怎么连接手机测试程序?

    Android Studio是谷歌推出了新的Android开发环境,开发者可以在编写程序的同时看到自己的应用在不同尺寸屏幕中的样子.同时谷歌对开发者控制台进行了改进,增加了五个新的功能. 方法步骤 1 ...

  6. Android Studio使用心得

    说实话 開始接触这个工具 真的认为非常恶心 毕竟大陆被墙  非常多东西用起来不是非常方便 并且Eclipse转到Android Studio还是一个跨度 废话不多说  以下 讲下我遇到的问题 1. 安 ...

  7. Android studio实验体会,Android Studio 使用心得体会

    Andorid 开发 在android 最初学习阶段,通常会遇到很多问题,Andorid 学习过程中知识点繁多,难以熟练的应用,不经过很长一段时间很难以熟练地运用自己所学的知识 其实Andorid 并 ...

  8. android studio 测试工具,使用Android Studio进行单元测试

    Android Studio已经到了1.2版本,国内的开发者基本也在从Eclipse向Android Studio进行转变,对于Android开发者,以后必将是Android Studio的天下. 昨 ...

  9. Android Studio经验积累之常见问题以及解决方式

    原文出处--Android Studio经验积累 1.获取SHA1: Android Studio中获取sha1证书指纹数据的方法 2.注释模板:android studio中如何设置注释模板 3.A ...

最新文章

  1. office插件开发_Visual Studio Code有哪些你常用的插件?
  2. VS2010 调用RFC 时注意(.net4.0) 使用nco
  3. iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)
  4. VC char和TCHAR之间转换
  5. css 浮动问题 display显示 和 光标设置cursor
  6. 最新、最前沿AI论文哪里找?
  7. diskgenius 单文件_电脑数据恢复及分区管理软件DiskGenius 英文专业版
  8. 【Spring】SpringMVC 初始化 流程
  9. symfony app dev.php,Symfony 2:404未找到当tryes打开/app_dev.php时出错
  10. 推荐 | 微软SAR近邻协同过滤算法相关问题(三)
  11. zabbix:unable to create mutex for log file
  12. 国二考试c语言考场能炒么,国2考试题_计算机国二office高级应用考试的题目是从题库20套里抽其中一套还是别的题目_淘题吧...
  13. 仿微信朋友圈点击评论自动定位到对应位置
  14. Discriminative Learning of Relaxed Hierarchy for Large-scale Visual Recognition
  15. react创建组件及注意事项
  16. Linux服务器重启后crs,更改服务器名后CRS无法启动
  17. Firefox 加速技巧
  18. 网页三剑客,html/css/javascript
  19. PAT 1069. 微博转发抽奖(20)
  20. 【无标题】Java实现进度条代码

热门文章

  1. 域名是什么_企业注册域名要知道什么?如何企业域名注册?
  2. C++安全方向openssl(二):2.2 C++代码实现base16编解码
  3. c语言程序员算法题库,100个超级经典地C语言算法,程序员必须练习.doc
  4. iscsi:IO操作流程(二)
  5. VS使用scanf函数报错解决方法
  6. Win10配置MinGW教程
  7. android图片上加有汉字,Android 为图片添加文字水印
  8. C语言储蓄系统编程,C语言:银行储蓄系统的开发(初级)-Go语言中文社区
  9. Scala match
  10. C语言转义字符介绍和示例