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文件夹下面建立测试类就可以了。

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

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

Android中如何进行单元测试_第1张图片
需要测试的函数

之后我们需要在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的自动化测试了,硬生生写了一周测试,好在今天写的简单点,挤出来点时间赶紧把烂尾的文章给写了,省的自己再拖下去了。。。。)

你可能感兴趣的:(Android中如何进行单元测试)