[转]Android产品研发(十九)

 

转载请标明出处:一片枫叶的专栏

 

上一篇文章中我们讲解了webview中问题集锦,讲解了webview的性能优化、webview种入Cookie信息、activity退出的时候清除webview信息报错、如何通过java代码和js代码相互交互、webview如何下载文件以及腾讯的X5浏览服务等知识,这些都是我在使用webview中遇到的问题,难点,实践等,更多关于这些问题的说明,可以参考我的:Android产品研发(十八)–>webview趟过的坑

 

本文我们将讲解如何在Android studio中进行单元测试。在Android开发项目中,经常会进行测试操作,而一次又一次的运行模拟器,浪费了大量时间,降低了工作效率降低,虽然最新的Android studio中提供了instance run功能,来提高Android studio的编译速度,但是我们还是需要了解Android studio的单元测试功能,其可以很方便的为我们提供功能性测试,所以如果项目中有用到测试数据的时候,可以先进行单元测试,如果可以正常输出数据了,然后再到UI中执行,这样会提高一些工作效率。

 

什么是单元测试:

 

在讲解如何在Android studio中进行单元测试之前我们先普及一下基本知识,即什么是单元测试,这里我先引用一下百科中对单元测试的描述:

 

是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

 

简单来说单元测试就是将一个软件功能拆分成N个最小的不可拆分的单元功能点,对着单元功能点的测试就是单元测试。

 

单元测试有什么作用:

 

Android中的测试一般分为:功能测试,ui测试,单元测试等等;
由于app运行需要Android运行环境,而我们的Android的单元测试一般无法提供运行环境,所以一般像功能测试,UI测试等都需要在模拟器或者是真机上进行,但是一些功能性的需求不需要Android环境的功能,如果也使用Android studio重新编译运行,那么耗费的时间就太长了,一般来说一个apk文件编译,安装,运行的时间一两分钟都是普遍的,三四分钟也可能,这样为了测试一个简单的功能,就需要花费这么长的时间重新编译运行,性价比太低。

 

因此单元测试主要是功能测试,主要用于测试一些功能性的需求;比如网络请求,比如数据存储等等。

 

Android studio对单元测试的支持:

 

新版的Android studio中添加了对单元测试的支持;如图所示:
这里写图片描述

 

该目录下编写测试用例即可。

 

单元测试可以测试那些内容?

 

这里需要说明的是Android studio的单元测试由于只是模拟Android开发环境,但是其不是真正的Android开发环境,所以不能测试UI功能,不能测试需要硬件支持的功能(比如蓝牙,wifi等),不能测试App跳转等等,那么其可以测试那些内容呢?

 

  • 测试一些数据性的功能,比如加载网络数据

  • 测试SharedPerferences,测试数据库,测试函数等

  • 工具类的测试,比如验证时间,转化格式,正则验证等等

 

简单的单元测试用例:

 

我们来看一下测试用例的写法:

 

/*** Instrumentation test, which will execute on an Android device.** @see <a href="http://d.Android.com/tools/testing">Testing documentation</a>*/
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentationTest {@Testpublic void useAppContext() throws Exception {// Context of the app under test.Context appContext = InstrumentationRegistry.getTargetContext();assertEquals("uuch.com.Android_activityanim", appContext.getPackageName());}
}

 

这是项目创建的默认的单元测试的类,可以看到其和普通的Class类无太多的区别,只是调用了相应的测试API而已,下面我们就自定义一个自己的单元测试类。

 

编写自定义的测试用例类:

 

  • 实现测试用例方法

 

/*** Created by aaron on 16/7/11.* 自定义的单元测试类*/@MediumTest
@RunWith(AndroidJUnit4.class)
public class MTest {@Testpublic void test1() {// Context of the app under test.Context appContext = InstrumentationRegistry.getTargetContext();assertEquals("uuch.com.Android_activityanim", appContext.getPackageName());Log.i("tag", "$$$$$$$$$$$$");assertEquals("result:", 123, 100 + 33);}
}

 

需要注意的是

 

  • 测试用例类需要使用注解:@MediumTest和@RunWith(AndroidJUnit4.class)

  • 我们所写的测试用例方法需要添加名称为Test的注解,否则的话,就找不到测试方法。

 

比如我们去掉注解Test的话:
这里写图片描述

 

再次执行的话,就找不到可执行的测试函数了。

 

还有一个问题,可以发现我们的函数都是这是的public的,如果我们设置我们的测试函数为private的货怎么样呢?修改测试函数

 

/*** 单元测试,测试函数*/
@Testprivate void test2() {Log.i("tag", "$$$$$$$$$$$$");assertEquals("result:", 123, 100 + 33);}

 

执行之后可以发现:
这里写图片描述

 

报错了,错误说明也很详细,说的是我们的测试函数需要设置为Public的,所以我们在编写测试函数的时候需要注意两点:

 

  • 测试函数需要为public

  • 测试函数需要添加@Test注解

 

如何执行测试用例

 

  • 直接在源码中右键执行

 

编写完成之后,如何运行呢?
这里写图片描述

 

可以选中需要测试的方法名称,然后右击,弹出操作提示框,这是选择run 方法名就可以了,这时候就可以执行该测试方法了。

 

测试用例里面为我们提供了测试过程中可能需要的系统环境对象
这里写图片描述

 

比如:application,context等等;以后我们再次编写单元测试的时候是不是很方便了呢?

 

  • Android studio菜单中执行测试用例

 

- 选择run-edit configuration
这里写图片描述

 

- 添加Android tests用例
这里写图片描述

 

- 配置tests方法
这里写图片描述

 

点击ok,这时候run区域就已经出现了我们刚刚添加的测试用例了
这里写图片描述

 

一个简单的单元测试小例子:

 

说了这么多,我们还是举一个实力的开发例子吧。

 

  • 情景
    有这样的一种情况,我们在开发过程中需要使用正则表达式验证一个字符串,但是我们想在重新编译Apk之前验证一下这个正则表达式,直接运行项目也可以打,但是太慢了,有什么简单的方式能够验证呢?这时候就可以使用我们的单元测试了。

  • 编码

 

/*** 单元测试,测试函数*/
@Testpublic void test2() {boolean result = "18210741899".matches("\\d{11}");Log.i("tag", "#####:" + result);/*** 验证邮箱*/assertEquals("result:", result, true);}

 

  • 执行
    这里写图片描述

 

这样我们就可以不启动我们的App就验证正则表达式的正确与否了。其中函数assertEquals为断言函数,用于判断结果是否正确,可以看到运行结果:1 test passed,说明我们的函数执行正确,即result为true,所以我们的正则表达式是正确的。

 

总结:

 

这样我们经过一系列的操作之后就介绍完了Android studio中进行单元测试的步骤,怎么样?很简单吧,O(∩_∩)O哈哈~

 

  • Android studio默认支持单元测试,可以在module下的AndroidTest下编写测试用例

  • 测试用例中提供了获取Context的API,可以通过该方法获取Context对象

  • 测试用例方法需要使用注解@Test表明,否则会报错,找不到测试方法

  • 测试方法需要定义为public,否则报错

  • 有两种执行测试方法的方式,可以直接在源码中右键执行,也可以在Android studio中配置测试方法

  • 执行单元测试会重新执行apk的编译,打包,安装操作,其优势是帮你免去了手动的打开某个页面执行某个操作的步骤。

 


另外对产品研发技术,技巧,实践方面感兴趣的同学可以参考我的:
Android产品研发(一)–>实用开发规范
Android产品研发(二)–>启动页优化
Android产品研发(三)–>基类Activity
Android产品研发(四)–>减小Apk大小
Android产品研发(五)–>多渠道打包
Android产品研发(六)–>Apk混淆
Android产品研发(七)–>Apk热修复
Android产品研发(八)–>App数据统计
Android产品研发(九)–>App网络传输协议
Android产品研发(十)–>不使用静态变量保存数据
Android产品研发(十一)–>应用内跳转scheme协议
Android产品研发(十二)–>App长连接实现
Android产品研发(十三)–>App轮训操作
Android产品研发(十四)–>App升级与更新
Android产品研发(十五)–>内存对象序列化
Android产品研发(十六)–>开发者选项
Android产品研发(十七)–>Hybrid开发
Android产品研发(十八)–>webview问题集锦

 


 

本文以同步至github中:https://github.com/yipianfengye/AndroidProject,欢迎star和follow

 



---------------------
作者:一片枫叶_刘超
来源:CSDN
原文:https://blog.csdn.net/qq_23547831/article/details/51868451
版权声明:本文为作者原创文章,转载请附上博文链接!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CC精品教程】ContextCapture 10.17安装教程(附CC10.17安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) CC10.17相比之前的版本有了好的新的功能和优点,在倾斜摄影测量中有了更多的优势,精度和运行速度有了很大的提升。本文讲解CC的安装,附CC10.17安装包下载,是您航测倾斜摄影测量的入门必备。 文…

mac SecureCRT设置

参考&#xff1a; http://www.2cto.com/os/201407/320292.html SecureCRT 设置 1&#xff09;每次登陆都要输入密码&#xff1a; Global Option -> General 取消&#xff1a;Use Keychain前面的勾 2&#xff09;Logon Actions Logon Actions很强大&#xff0c;和python里…

华为云GaussDB,11.11让企业无后顾之忧

每年11.11大促对于数据库而言都是一场生死考验&#xff0c;如何保障系统的稳定可靠&#xff0c;如何平稳度过业务流量洪峰期&#xff0c;如何高效扩容&#xff0c;成为每个参与活动客户的一大痛点。本文将通过5个常见的大促问题及分析&#xff0c;看看华为云GaussDB是如何解决这…

【CC精品教程】ContextCapture(CC)集群处理环境部署图文教程

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 鉴于CC其三维构建运算的本质,海量数据的解析运算会使用大量的计算机资源,而再好的单台计算机也无法胜过多台计算机的并行运算能力,故而借助局域网内多台计算机设备进行三维构建运算,可以节省大…

Linux-PAM PAM-MySQL的总结

1、理论知识 1.1、PAM模块 1.1.1、PAM的介绍 Pluggable Authentication Modules简称PAM&#xff0c;是一个微缩的可插入认证模块&#xff08;PAM is an acronym for Pluggable Authentication Modules&#xff09; 1.1.2、PAM的结构 1)模块层(PAM服务模块) - PAM结构最底层 作用…

ubuntu下配置jdk(离线压缩包方式)

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;下载jdk压缩包 2、解压后得到名字为jdk1.7.0_21的文件夹&#xff0c;将其复制到 /usr/lib/jvm下&#xff08;需要新建jvm文件夹&#xff09;。3、配置jdk环境变量&#xff1a;在启动终端并输入 gedit /e…

【PhotoScan精品教程】PhotoScan简介、安装教程(附PhotoScan1.4.5安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) PhotoScan在无人机航空摄影测量空三运算中,具有运行速度快、精度高等特点。PhotoScan空三运算的结果可以导入CC等进行模型构建。【PhotoScan精品教程】讲解利用PhotoScan软件进行航测内业空三运算…

利用JS脚本快速删除百度网盘同一目录下的不需要文件(可以参考这个方法删除重复文件)

比如百度网盘某目录下存有如下文件&#xff1a; 要求&#xff1a;将如上图文件目录下的文件&#xff0c;每个月只保留最后&#xff08;新&#xff09;一个&#xff08;根据文件名中包含的日期&#xff09;&#xff0c;其它删除。 比如7月份有3个文件&#xff0c;只保留2019-07-…

依赖注入之针对不同类型变量的几种注入方式

控制反转(Inversion of Control)和依赖注入(Dependency Injection)讲的都是一个概念,只不过是站在了不同的角度,所谓的依赖注入: 依赖注入&#xff08;DI&#xff09;是指在运行期&#xff0c;由外部容器动态地将依赖对象注入到组件中。当spring容器启动后&#xff0c;spring容…

【本周六活动】.NET Day in China

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍去年11月&#xff0c;.NET 6 的发布&#xff0c;为我们带来了 .NET 多平台应用 UI&#xff08;.NET MAUI&#xff09;。就在前不久&#xff0c;.NET MAUI 已正式发布。未来&#xff0c;作为 .NET 7 …

【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配 【PhotoScan…

[转]Angular 单元测试讲解

Angular_单元测试 测试分类 按开发阶段划分按是否运行划分按是否查看源代码划分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular单元测试 Karma的介绍jasmine介绍单元测试的好处使用jasmine和karma创建一个Angular项目Karma配置Test.ts文件测试体验测试Form测试服务service常用断言…

按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格...

首先来建立一个新的Excel文档&#xff0c;在桌面上点击右键&#xff0c;选择【新建】-【Excel工作表】&#xff0c;命名为【新手学员】。 现在这个新Excel文档是空白的&#xff0c;我们接下来会通过按键精灵的脚本来打开并写入一些数据。打开按键精灵软件&#xff0c;点击【新建…

Maui的学习之路 -- 开篇

Maui的学习之路 -- 开篇想了很久我决定发一个Maui介绍做为开篇&#xff0c;虽然这是老生常谈的话题&#xff0c;但是不能没有这样的探讨&#xff08;请容我水一篇&#xff09;。什么是.NET Maui.NET Maui是微软的一款基于.Net多平台应用 UI (.NET MAUI)的跨平台框架&#xff0c…

互联网架构的演变,看了好多这个讲的确实清楚!

从过去的 OA、CRM、ERP 等单机即可满足要求的系统到现代互联网时代各大公司的分布式、微服务平台&#xff0c;互联网架构正在经历着巨大的变革&#xff0c;技术也在不断的更新迭代。 图片来自 Pexels这也意味着众多软件开发者们的压力和挑战正在不断的加大&#xff0c;这种新技…

【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) Inpho UASMaster是Trimble公司旗下的一款摄影测量处理软件。本文讲解Inpho简介、安装教程(附Inpho8安装包下载)。 文章目录 1. Inpho简介2. Inpho安装教程3. Inpho8下载地址1. Inpho简介 1.1 主…

MAUI使用Masa blazor组件库

上一篇(点击阅读)我们实现了UI在Web端(Blazor Server/Wasm)和客户端(Windows/macOS/Android/iOS)共享&#xff0c;这篇我加上 Masa Blazor[2]组件库的引用&#xff0c;并把前几个月写的时间戳转换[3]工具加上。1. 前置知识关于Masa Blazor请点击Masa Blazor官网[4]了解&#xf…

常用的NSLOG日志打印格式

2019独角兽企业重金招聘Python工程师标准>>> 常用的NSLOG日志打印格式 以下是常用的LOG打印&#xff0c;如果有特殊&#xff0c;请我 &#xff0c;这边会不定期更新。 % 对象 %d, %i 整数 %u 无符整形 %f 浮点/双字 %x, %X 二进制整数 %…

Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

1、 问题 在Android studio里面运行java的lib库&#xff0c;但是错误提示如下 Build file F:\sourceZip\app\build.gradle line: 2An exception occurred applying plugin request [id: com.android.application] > Failed to apply plugin com.android.internal.applicat…

[转]浅析DDD(领域驱动设计)

最近在做一些微服务相关的设计&#xff0c;内容包括服务的划分&#xff0c;Restful API的设计等。其中比较棘手的就是Service的职责划分&#xff1a;如何抽象具有统一业务范畴的Model&#xff0c;使其模块化&#xff0c;又如何高度提炼并组合多模块&#xff0c;使得业务可独立服…