《精通移动App测试实战:技术、工具和案例》一2.2 JUnit在Android开发中的应用
本节书摘来自异步社区《精通移动App测试实战:技术、工具和案例》一书中的第2章,第2.2节,作者 于涌 , 王磊 , 曹向志,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.2 JUnit在Android开发中的应用
2.2.1 单元测试的重要性
前面我们提到了单元测试,那么什么叫单元测试呢?单元测试(Unit Testing),是指对软件中的最小可测试单元进行的检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如在Java中单元指一个类,在C语言里单元指一个函数等。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。通常,我们在编写大型应用系统的时候,都要写成千上万个方法或函数,这些方法或函数的功能通常都是有限的,但是它们却是这个应用系统的根基,只有确保每一个函数或者方法都实现了其意图,才能保证整个系统能够正常、准确地运行。千里之堤溃于蚁穴,如果我们没有对每一个细小的函数或者方法进行系统的单元测试,很有可能最后直接导致整个系统最终被淘汰的结果。由此可见,单元测试十分重要,也非常必要。
2.2.2 单元测试实施者
我们在进行软件开发过程中,发现在不同的软件企业可能会经常提到一个问题就是“单元测试”应该由谁来做?不同的软件企业可能答案也是不一样的,有的公司单元测试是由程序编写人员实施,有的企业则是由测试人员来实施,我们说其实施的形式无所谓,关键是针对单元测试一定要有实施效果,经过单元测试后的源代码的健壮性、稳定性、执行效率等方面一定要有提升的才是关键所在。也许我们听说过有很多著名的国际软件公司,它们的开发与测试人员的比例是10比1 ,20比1,有的甚至是50比1。看到这个数字,也许我们第一反应就是怎么可能?绝对不会吧?试想一下,如果自己的单位也这样去做后果是什么样呢?最后,我们可以得出一个一致的结论,对于我们公司若是这样的人员配比,开发的软件产品一定是一坨“屎”。结合作者以往在国内的一些中小型软件企业的工作经历来讲,也同意大家得出的最后结论。为什么同样的人员配比,在不同的软件企业得到的最终产品会有如此之大的差异呢?根本原因就是大家对待单元测试的态度不同,最终导致的结果不同。在国内很多程序编写人员认为凡是涉及到测试的,都应该由测试人员来做,不管是单元测试、功能测试、性能测试、安全性测试等统统应该由测试人员来搞,然而大多数公司在人员招聘的时候对测试人员的要求偏低,招聘的人员数量也较少,试想在招聘的时候仅仅要求做功能测试,公司3、5个人测试一个庞大的系统软件,在时间少、任务重的情况下,这些测试人员哪有时间进行其他类型的测试,同时在没有白盒测试经验的积累情况下,突然要求测试人员做基于源代码的单元测试工作是不是有点更加“搞笑”呢。与之不同,在国际上出名的一些大公司,它们的程序编写人员是具备单元测试理论和实践知识的,他们在编写程序代码的时候,就会对其实现的类的方法和模块功能进行单元测试,他们不仅仅把实现其负责的软件功能作为自己的工作内容,还把单元测试同样作为其重要职责之一。而专业的测试人员则主要针对软件集成、一些重要的容易被忽视的测试关键技术的应用做测试,这当然就减少了测试人员的工作量,也相应会提升测试产品的质量了。
由此,我们是不是能够得到一些启发呢?
单元测试应该是程序编写人员必备的一项基本素质,所有的程序编写人员应该把其作为自己工作内容的一部分,而专业的白盒测试人员也应该加强对程序编写人员相关单元测试理论和实践经验的培训与指导,不断提升程序编写人员的理论和实践经验。同时白盒测试人员应该更加关注系统的集成测试、接口测试和那些容易被程序编写人员忽视的一些地方的测试工作。
2.2.3 单元测试测试哪些内容
我们在进行单元测试时,通常应把以下内容作为单元测试的重点。
(1)核心的类方法。
(2)异常处理内容。
(3)边界条件。
(4)算法效率。
(5)业务逻辑。
(6)需求变动频繁之处。
2.2.4 单元测试不测试哪些内容
我们在进行单元测试时,通常不应把以下内容作为单元测试的内容。
(1)不测构造函数。
(2)不测Setter()、Getter()方法。
(3)不测框架。
2.2.5 创建基于Android的测试项目
前面我们介绍了一些关于单元测试的知识,相信大家都已经理解了,现在就让我们结合在1.5节实现的样例程序,如图2-2所示,作为我们使用JUnit进行单元测试的例子,来详细向大家介绍JUnit在基于Android项目进行单元测试的应用。
让我们再看一下这个小应用的完整实现源代码。
MainActivity.java文件内容如下。
package com.yuy.calculatoroftwonum; import android.R.string; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { public int add(int num1,int num2){ return num1+num2; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button calc = (Button)findViewById(R.id.btncalc); calc.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub EditText t1 = (EditText)findViewById(R.id.edtnum1); EditText t2 = (EditText)findViewById(R.id.edtnum2); int a= Integer.parseInt(t1.getText().toString()); int b= Integer.parseInt(t2.getText().toString()); String s= Integer.toString(add(a, b)); Toast.makeText(MainActivity.this,s, Toast.LENGTH_LONG).show(); } } ); Button exit = (Button)findViewById(R.id.btnexit); exit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《移动App测试的22条军规》——第23章,第19节对微信App进行自动化测试和探索性测试
本节书摘来自异步社区《移动App测试的22条军规》一书中的第23章,第19节对微信App进行自动化测试和探索性测试,作者 黄勇,更多章节内容可以访问云栖社区“异步社区”公众号查看 23.19 对微信App进行自动化测试和探索性测试我们在对微信App进行测试时,必然会进行自动化和探索性测试。 (1)在编写微信App的自动化测试时,我们还是选用Appium来帮助我们录制对应的脚本;而基于测试金字塔的测试架构设计,我们对于Appium的自动化测试,选择编写“用户登录微信后,在通讯录中添加招商银行公众号”这个用户旅程(如图23.45~图23.55所示)。 打开微信App的主界面(如图23.45所示)。打开“Contacts”(通讯录)页面(如图23.46所示)。 点击右上角的“+”号按钮(如图23.47所示)。选择“Add Contacts”( 添加朋友)(如图23.48所示)。 点击搜索框(如图23.49所示)。在搜索框中输入“cmb”(如图23.50所示)。 点击“Search: cmb”(如图23.51所示)。选择搜索结果中的第一个公众号“招商银行”(如图23.52所示)。 在招商银行公...
- 下一篇
《趣学CCNA——路由与交换》一第6章 操作与配置Cisco IOS设备6.1 认识Cisco设备
本节书摘来自异步社区《趣学CCNA——路由与交换》一书中的第6章,第6.1节,作者 田果 , 彭定学,更多章节内容可以访问云栖社区“异步社区”公众号查看 第6章 操作与配置Cisco IOS设备 趣学CCNA——路由与交换套用网上流传的某职校领导的发言,我们也可以说:咱们CCNA教材如果不踏踏实实介绍设备的使用方法,那跟大学教材还有什么区别? 当然,这里只是开个玩笑。实际情况是,当前绝大多数高等学校的路由交换技术教材,也把大量的篇幅用在了介绍设备的使用方法上,从985院校到211院校概莫能外。说得极端一些,哪怕在象牙塔里,工程技术领域也是不欢迎“唯理论派”的,因为工程技术本身就不是理论学科,它不属于那种光靠思考就可以转化成生产力的行业。所以,没有实践价值的理论知识基本上就没有价值。相反,一些可以转化成生产力的方法,就算没法归纳为一套成形的理论体系(比如项目经验),也是相当有价值的,这就是这个行业的收入和工作年限成正比的原因之一。 从网络实施的角度看,前面的几章都属于务虚,都是在给后面介绍“如何做”提供理论基础。而从本章开始,咱们正式迈入务实的阶段,开始以Cisco产品为基础,脚踏实地地...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果