51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1615|回复: 0
打印 上一主题 下一主题

Android单元测试的利器:Juint的介绍和基础使用

[复制链接]
  • TA的每日心情
    擦汗
    11 小时前
  • 签到天数: 1047 天

    连续签到: 5 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2017-10-12 15:28:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    前言
      相信很多朋友刚接触AndroidStudio的时候跟我会有同样的问题:

      这里写图片描述

      这个androidTest文件夹和test文件夹有什么作用呢?
      很多的基础资料都一笔带过:这两个是编写测试方法的文件夹,暂时不过管。
      于是这个暂时不用管,就不知道暂时到什么时候了。首先编写[url=]测试用例[/url]对于新手程序员来说是一个加分项,所以刚开始接触Android的时候,我们把更多的精力用在熟悉api和开发思想上是正确的,随着工作经验的增加,我们对于开发大部分的应用已经轻车熟路,分分钟搞定的时候,才慢慢发现编写测试用例是一件非常重要的事情。
      正文
      做Android开发时间长了,我们会发现几个测试的蛋疼的地方:
    1. <font color="#000000"> 1、需要一台手机,或者是Android模拟器。
    2.   2、随着工程的开发,编译时间会越来越长。
    3.   3、有时候仅仅是想验证一下自己定义的方法是否正确。</font>
    复制代码

    例如List中,日期格式从yyyy/MM/dd 变成 yyyy-MM--dd,为了安全起见,修改后都要重新编译运行,漫长的等待让我烦躁,我不保证再简单的问题我都能一次修改正确,烦躁更容易出现低级的错误,于是这个等待的过程可能还要经历好几次。
      经历了无数次的折磨,才发现Android Studio早就未卜先知,为我们提供了测试利器,那就是Juint。
      Juint
      JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。(来自百度)
      我们先来看看再test文件夹中如何编写本地单元测试,AndroidTest会之后的系列再讲。
      Juint的是用来测试Java语言的框架,也就是说他没办法测试一些Android的api,例如View,Activity等等,但是应付我刚才的情况已经绰绰有余了,尤其是测试我们定义的工具类,或者是性能验证,真的是非常方便。
      当我们创建一个新的Module,你在gradle文件会看到:

    1.  dependencies {
    2.       ...
    3.       androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    4.           exclude group: 'com.android.support', module: 'support-annotations'
    5.       })
    6.       testCompile 'junit:junit:4.12'
    7.   }
    复制代码
    Android Studio 已经自动为我们引入了Junit框架,完全不需要我们操心,接下来我们就来解决之前的日期转换的问题。
      首先我们编写我们的日期转换工具类TimeUtil:
    1. /**
    2.    * Created by li.zhipeng on 2017/9/18.
    3.    * <p>
    4.    * 时间转换工具
    5.    */
    6.   public class TimeUtil {
    7.       public static String formateTime(long time) {
    8.           SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    9.           return sdf.format(time);
    10.       }
    11.   }
    复制代码
    之后来编写本地单元测试,我们现在test文件夹中的包下,创建一个TimeUtilTest的文件:
    1. import org.junit.Test;
    2.   import static org.junit.Assert.assertEquals;
    3.   /**
    4.    * Created by li.zhipeng on 2017/10/10.
    5.    *
    6.    *      时间转换的测试用例
    7.    */
    8.   public class TimeUtilTest {
    9.       /**
    10.        * 运行的测试方法,注意需要使用@Test注解
    11.        */
    12.       @Test
    13.       public void timeFormat_isCorrect() throws Exception {
    14.           long time = 1505720213000L;
    15.           //预期的结果
    16.           String result = "2017/09/18 15:36:53";
    17.           assertEquals(result, TimeUtil.formateTime(time));
    18.       }
    19.   }
    复制代码
     是不是很简单,需要运行的测试方法需要使用@Test注解标记,assertEquals表示期望result和TimeUtil.formateTime(time)是相等的,也叫做断言,除了assertEquals还有其他的断言,这里先不做解释了。
      然后在这个文件中右键,点击运行这个测试用例或者测试方法:

      这里写图片描述

      得到的结果:

      这里写图片描述

      看到测试总共运行107ms,一个测试通过了,如果没通过就会出现红色报错。但是我还是不放心,我想看看具体的转换结果,这个时候千万不要用Log,还记得Java的打印用的是什么吗?System.out.println(),修改代码:
    1. public class TimeUtilTest {
    2.       /**
    3.        * 运行的测试方法,注意需要使用@Test注解
    4.        */
    5.       @Test
    6.       public void timeFormat_isCorrect() throws Exception {
    7.           long time = 1505720213000L;
    8.           //预期的结果
    9.           String result = "2017/09/18 15:36:53";
    10.           System.out.println("转换的结果是:" + Utils.formateTime(time));
    11.           assertEquals(result, Utils.formateTime(time));
    12.       }
    13.   }
    复制代码
    运行结果:

      这里写图片描述

      我们看到了输出的结果的确是和我们期望的一样。
      总结
      经过一个简单的demo的体验,不知道你是否觉得方便了很多,每一次修改,我只要在电脑上本地测试一下,直到结果满意了,我再去手机上运行就OK了。
      回顾这篇文章,我们简单的了解了Junit的作用和使用场景,并且通过demo初步了解了他的用法,如果你对于Juint的故事感兴趣,我希望是在你能具体的掌握了Juint的用法,再带着感激之情去了解他的由来,相信更能引起你的共鸣。



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 20:58 , Processed in 0.068784 second(s), 30 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表