Android中如何进行单元测试

写在前面

刚换一个新工作,先熟悉了一周的代码,第二周上班第一天老板开会来了个以后开发必须要先单元测试。。。
瞬间心中万只神兽奔腾不止(在此之前我只知道单元测试这四个字)
so 写你mmp,老子不干了!
当然这只是心里发泄一下,还得写。不过好在老板给了学习时间(良心老板)我也有机会学习一下单元测试(好高兴啊!又多了一项装X技能)
0k,言归正传,下面开始今天的内容。

通过本文你能学到:

  1. 什么是单元测试?
  2. 为什么要写单元测试?
  3. 单元测试在Android中要怎么写?

知己知彼,百战不殆

想要写好单元测试,我们肯定要知道什么是单元测试。

单元测试时针对程序的最小单元来进行正确性检验的测试工作。程序单元是应用的最小可测部件。一个单元可能是单个程序、类、对象、方法等。 ——维基百科

当然这是官方解释,用我们能理解的话来说就是:

单元测试就是验证你程序中某个函数或者方法的逻辑正确性的测试方式。也就是验证你的方法或者函数是否逻辑正确。

(当然这也理解也有些片面,但实际我们写单元测试也主要为了这个目的)

宜未雨而绸缪,毋临渴而掘井

知道了什么是单元测试,那我们为什么要写单元测试?

  • 老板要求
  • 老板要求
  • 老板要求

OK 正经的说,我们为什么要写单元测试:

  1. 减少一些未知bug
  2. 出bug的时候可以快速定位,减少调试时间
  3. 提高代码质量
  4. 不留后患
减少未知bug

我们在写代码的时候通常都按照自己的逻辑来走,所以很多情况下运行都不会有问题,但是一让别人运行就会暴露出各种问题。所以我们有必要为自己的代码负责。
前面已经说了,单元测试就是对某个函数或者方法进行测试。那如果我们每个方法和函数都运行正常,那么组合起来肯定也是没问题的。
所以,对方法和逻辑进行单元测试就是必要的。

快速定位bug,减少调试时间

正常情况,我们想调试程序必须运行程序(不是废话么),但对于Android而言,运行程序就需要跑到虚拟机或者真机上,那这个时间快的话需要几十秒,慢的话要几分钟。(我还运行过十几分钟的,一天跑几遍程序都™要下班了),这大大降低了我们开发的效率。如果我们写了单元测试,那么我们只需要运行全部测试,不需要跑到模拟机,也不需要运行全部程序,找到运行不通过的测试,修改问题,再次测试。。。。这个效率就大大提高了。
还有一个关键的,如果你的程序运行没有报错,但是运行结果不是预期结果(也就是逻辑有问题),如果我们想找到这种bug,那么我们就需要打断点,一行一行运行,定位到出问题的地方,然后在进行修改。
但是如果有了单元测试,我们只需要运行一遍测试代码,如果不是预期结果,测试不通过,那我们很快能定位bug并且进行修改。

提高代码质量

没写单元测试的时候,我们的代码风格全看自己心情,基本都是这个依赖这个,那个有包含那个的。但是如果写了单元测试,这些情况会大大减少。
因为做单元测试的时候需要隔离外部的依赖,来确保当前单元的逻辑正确性。所以我们需要把依赖进行隔离,这样就促使我们优化代码逻辑,更大程度减少代码的耦合性。久而久之我们就提高了自己的代码质量。

不留后患

相信每个程序员都经历过,刚到一个新公司,需要在原来的项目上添加功能或者修改功能。每每到这个时候,我们都要祈祷修改的代码别的地方不要出问题。生怕出现改一个方法,整个app全部崩溃的情况。
如果有了单元测试,那你可以有这种操作:
写完一个类,运行全部测试,测试通过,发布;测试不通过,修改测试代码,再次测试。。。
这样是不是不用再担惊受怕了。

授人以鱼不如授人以渔

前面说了那么多单元测试的好处,小伙伴们是不是蠢蠢欲动想试试了。
ok,那么Android中要怎么写一个单元测试呢?

写之前我们还是要准备一些东西的。

对于使用Android Studio的小伙伴们来说,我们的项目中总会有这么个东西

Junit单元测试库

这个东西其实就是java的单元测试库,我们写单元测试需要依赖的方法就在这里面。
而在android目录下除了我们的代码文件夹,还会多两个名字一样的文件夹,一个是(androidTest)另外一个是(Test)。
我们要写一个简单的单元测试只需要在text文件夹下面建立测试类就可以了。

如下是一个简单的测试加法的单元测试:

首先我们需要有被测的方法:

需要测试的函数

之后我们需要在Test目录下新建一个测试类:

public class TestDemoTest {
private TestDemo testDemo;

/**
 * 测试开始前操作
 *
 * @throws Exception
 */
@Before
public void setUp() throws Exception {
    System.out.print("----------------------单元测试开始----------------------" + "\r\n");

}

@Test
public void sum() throws Exception {
    //测试正常逻辑
    assertEquals(3, testDemo.sum(1, 2));
    //测试运算错误逻辑
    assertEquals(5, testDemo.sum(2, 3));
    //测试第一个参数为负数逻辑
    assertEquals(2, testDemo.sum(-1, 3));
    //测试第二个参数为负数逻辑
    assertEquals(-2, testDemo.sum(1, -3));
    //测试二个参数均为负数逻辑
    assertEquals(-4, testDemo.sum(-1, -3));
    //测试最小值边界值逻辑

}

@After
public void tearDown() throws Exception {
    //测试完成后操作
    System.out.print("----------------------单元测试完成----------------------" + "\r\n");
}

自此一个简单的单元测试就完成了。小伙伴们可以手动试一下了。

后面我会把Junit的一些使用方法记录下来。敬请期待。。。

(后记,本来这篇文章是我看单元测试的那周要写出来的,无奈公司要对web端进行自动化测试,然而我刚来,android有头在写功能,我就被拉去写web的自动化测试了,硬生生写了一周测试,好在今天写的简单点,挤出来点时间赶紧把烂尾的文章给写了,省的自己再拖下去了。。。。)

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,280评论 25 707
  • 说起软件测试四个字,想必大家脑海中浮现的有集成测试、系统测试、黑盒测试、白盒测试等,可能就是没想到会有单元测试。 ...
    斜杠时光阅读 3,221评论 0 6
  • 我真的很苦恼。。。。
    a_foo阅读 166评论 0 0
  • (一) “你这是又要去哪里?”看着眼前一身男装的叶浅浅,凤锦眉毛直跳。 “呃,不去哪里,,,”叶浅浅则抽了抽嘴角,...
    浅海之心阅读 132评论 1 0
  • 把优秀变成一种习惯,用时间去积累。给自己设定好的微习惯,然后就去坚持。 第一,身体。不论做什么,我们必须要有好身体...
    LoveYoga喵喵阅读 134评论 1 2