×
嵌入式 > 嵌入式开发 > 详情

android的单元测试用例

发布时间:2021-05-14 发布时间:
|

  Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。

  Android一词的本义指“机器人”,同时也是Google于2007年11月5日

  

  Android logo相关图片

  宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。

  Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l‘Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L’ève future)中。他将外表像人的机器起名为Android。

  Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,[1] 于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。

  如何在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 {

  @Test

  public void useAppContext() throws Exception {

  // Context of the app under test.

  Context appContext = InstrumentationRegistry.getTargetContext();

  assertEquals(“uuch.com.Android_activityanim”, appContext.getPackageName());

  }

  }12345678910111213141516

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

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

  实现测试用例方法

  /**

  * Created by aaron on 16/7/11.

  * 自定义的单元测试类

  */

  @MediumTest

  @RunWith(AndroidJUnit4.class)

  public class MTest {

  @Test

  public 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);

  }

  }12345678910111213141516171819

  需要注意的是

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

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

  比如我们去掉注解Test的话:

  

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

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

  /**

  * 单元测试,测试函数

  */

  @Test

  private void test2() {

  Log.i(“tag”, “$$$$$$$$$$$$”);

  assertEquals(“result:”, 123, 100 + 33);

  }12345678

  执行之后可以发现:

  

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

  测试函数需要为public

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

  如何执行测试用例

  直接在源码中右键执行

  编写完成之后,如何运行呢?

  

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

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

  

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

  Android studio菜单中执行测试用例

  - 选择run-edit configuration

  

  - 添加Android tests用例

  

  - 配置tests方法

  

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

  

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

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

  情景

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

  编码

  /**

  * 单元测试,测试函数

  */

  @Test

  public void test2() {

  boolean result = “18210741899”.matches(“\\d{11}”);

  Log.i(“tag”, “#####:” + result);

  /**

  * 验证邮箱

  */

  assertEquals(“result:”, result, true);

  }123456789101112

  执行

  

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

  总结:

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

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

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

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

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

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

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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
发明专利在疫情影响下的逆势增长