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

前言

相信很多朋友刚接触Android Studio的时候跟我会有同样的问题:

这里写图片描述

这个androidTest文件夹和test文件夹有什么作用呢?

很多的基础资料都一笔带过:这两个是编写测试方法的文件夹,暂时不过管

于是这个暂时不用管,就不知道暂时到什么时候了。首先编写测试用例对于新手程序员来说是一个加分项,所以刚开始接触Android的时候,我们把更多的精力用在熟悉api和开发思想上是正确的,随着工作经验的增加,我们对于开发大部分的应用已经轻车熟路,分分钟搞定的时候,才慢慢发现编写测试用例是一件非常重要的事情。

正文

做Android开发时间长了,我们会发现几个测试的蛋疼的地方:

1、需要一台手机,或者是Android模拟器。
2、随着工程的开发,编译时间会越来越长。
3、有时候仅仅是想验证一下自己定义的方法是否正确。

例如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文件会看到:

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
}

Android Studio 已经自动为我们引入了Junit框架,完全不需要我们操心,接下来我们就来解决之前的日期转换的问题。

首先我们编写我们的日期转换工具类TimeUtil:

/**
 * Created by li.zhipeng on 2017/9/18.
 * <p>
 * 时间转换工具
 */

public class TimeUtil {

    public static String formateTime(long time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        return sdf.format(time);
    }
}

之后来编写本地单元测试,我们现在test文件夹中的包下,创建一个TimeUtilTest的文件:

import org.junit.Test;
import static org.junit.Assert.assertEquals;

/**
 * Created by li.zhipeng on 2017/10/10.
 *
 *      时间转换的测试用例
 */
public class TimeUtilTest {

    /**
     * 运行的测试方法,注意需要使用@Test注解
     */
    @Test
    public void timeFormat_isCorrect() throws Exception {
        long time = 1505720213000L;
        //预期的结果
        String result = "2017/09/18 15:36:53";
        assertEquals(result, TimeUtil.formateTime(time));
    }

}

是不是很简单,需要运行的测试方法需要使用@Test注解标记,assertEquals表示期望result和TimeUtil.formateTime(time)是相等的,也叫做断言,除了assertEquals还有其他的断言,这里先不做解释了。

然后在这个文件中右键,点击运行这个测试用例或者测试方法:

这里写图片描述

得到的结果:

这里写图片描述

看到测试总共运行107ms,一个测试通过了,如果没通过就会出现红色报错。但是我还是不放心,我想看看具体的转换结果,这个时候千万不要用Log,还记得Java的打印用的是什么吗?System.out.println(),修改代码:

public class TimeUtilTest {

    /**
     * 运行的测试方法,注意需要使用@Test注解
     */
    @Test
    public void timeFormat_isCorrect() throws Exception {
        long time = 1505720213000L;
        //预期的结果
        String result = "2017/09/18 15:36:53";
        System.out.println("转换的结果是:" + Utils.formateTime(time));
        assertEquals(result, Utils.formateTime(time));
    }

}

运行结果:

这里写图片描述

我们看到了输出的结果的确是和我们期望的一样。

总结

经过一个简单的demo的体验,不知道你是否觉得方便了很多,每一次修改,我只要在电脑上本地测试一下,直到结果满意了,我再去手机上运行就OK了。

回顾这篇文章,我们简单的了解了Junit的作用和使用场景,并且通过demo初步了解了他的用法,如果你对于Juint的故事感兴趣,我希望是在你能具体的掌握了Juint的用法,再带着感激之情去了解他的由来,相信更能引起你的共鸣。

接下来我们就更加具体的了解Juint 4.0 版本的用法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,457评论 25 707
  • Android单元测试介绍 处于高速迭代开发中的Android项目往往需要除黑盒测试外更加可靠的质量保障,这正是单...
    东经315度阅读 3,091评论 6 37
  • 做开发这么长时间了,对app测试一直没有深入研究过。平时开发完后,都是自己根据原型操作一下,没有太大问题就交给其他...
    皇马船长阅读 6,429评论 0 6
  • 个人实际测试过,成功。(环境:SDK1.6,WindowsEclipse 及仿真板上均运行成功。原作者的 “两个测...
    4528283108ee阅读 711评论 0 1
  • 在centos6.7 x64上编译安装mesos 0.24.0时需要使用gcc 4.8以上版本, 此处记录编译方法...
    imsilence阅读 1,092评论 0 0