浅谈Android单元测试的作用以及简单示例

  

  

<>强受人嫌弃的单元测试

  

对于单元测试这个知识点,其实很多开发者是不太接触的,包括笔者,在实习之前也并未实用过单元测试,或者说并没感受到单元测试的好处。
  

  

对于错误的调试,笔者之前更倾向于使用日志和断点调试,可以说会了这两个,大部分的逻辑错误都能自己解决了。这两个与看似臃肿的单元测试代码相比更受大家的喜爱。
  

  

但是,使用日志和断点调试的前提是开发人员较少,甚至是单人开发的情况。如果我自己开发,我完全可以每次都使用集成测试,我知道每一个功能会涉及哪些模块的代码,然后根据逻辑设置日志或者断点调试。

  

<强>多人开发难以处理的问题

  

然而,如果是多人开发呢?每一个模块的代码很可能是由不同的人分开负责的,错误的产生由不同模块共同产生。每一个模块的代码可能都比较复杂,产生错误后,阅读其他人的模块本身比较浪费时间,其次基本不可能让你去修改其他人的代码,这可能会破坏他人的代码结构。
  

  

而且错误可能也并不在其他人的代码中,也可能是你们的交互方式有问题。产生虫的原因有太多,并且由单人直接日志或者断点调试难以处理,那么这种情况怎么办呢?

  

单元测试就一定程度上处理了这种困难的情况:给每一个模块加上单元测试,如果该模块可以通过单元测试,就代表没有问题。
  

  

在这种情况下,程序员们面对的问题不再是要让整个项目到达理想的效果,而是让自己所面对的单元测试可以通过。这样就大大减少了多人开发中的交互成本。

  

  

主要就两个文件:
  

  

浅谈Android单元测试的作用以及简单示例

        包com.example.xujiajia_sx.myexpressotest;      进口android.support.v7.app.AppCompatActivity;   进口android.os.Bundle;      公开课MainActivity延伸AppCompatActivity {      @Override   保护空白>   包com.example.xujiajia_sx.myexpressotest;      进口org.junit.Test;      进口静态org.junit.Assert。*;/* *   *由xujiajia_sx alt="浅谈Android单元测试的作用以及简单示例">

  

我们计算()方法的逻辑是返回a + b + 1,所以是4,最终不会报的错,如果我们把assertequal中改的4成3效果如下:
  

  

浅谈Android单元测试的作用以及简单示例

  

如图,测试会直接报错,并且定位到错误的那一行,然后我们就可以看到是MainActivity.calculate()输出的值不等于3所造成的。

  

<强>断言方法

  

示例本身比较简单,但是对于刚刚接触单元测试读者可能对assertequal()比较陌生,这是维护这个类中的静态方法,单元测试中一般就是通过它来判断是否达到理想的效果。
  

  

笔者此处使用了int之间的判断,维护中还有很多其他的用法,笔者可以去AndroidDevelpers上自己查看,此处为了方便,笔者为了方便就直接复制了。

        静态孔隙assertequal(布尔预计,布尔实际)      静态孔隙assertequal(字符串消息,长预期,实际)      静态孔隙assertequal(短料,短实际)      静态孔隙assertequal(字符串消息,字符串预期,字符串实际)      静态孔隙assertequal(实际字符串消息,int, int)      静态孔隙assertequal(实际对象预期,对象)      静态孔隙assertequal(实际字符串消息,布尔预计,布尔)      静态孔隙assertequal(字符串预期,字符串实际)      静态孔隙assertequal(实际字符串消息,短料,短)      静态孔隙assertequal(字符串消息,对象预期,对象实际)      静态孔隙assertequal(实际字符,字符)      静态孔隙assertequal(实际字节,字节)      静态孔隙assertequal(实际双预期,双、双δ)      静态孔隙assertequal(字符串消息,char预期,char实际)      静态孔隙assertequal(实际预期的浮动,浮动,浮动δ)      静态孔隙assertequal(实际字符串消息,双预期,双、双δ)      静态孔隙assertequal(实际字符串消息,字节,字节)      静态孔隙assertequal(字符串消息,浮动预期,实际浮动,浮动δ)      静态孔隙assertequal(长预期,实际)      实际静态孔隙assertequal (int, int)      静态孔隙assertFalse(字符串消息,布尔条件)      静态孔隙assertFalse(布尔条件)      静态孔隙assertNotNull对象(对象)      静态孔隙assertNotNull(字符串消息,对象对象)      静态孔隙assertNotSame(字符串消息,对象预期,对象实际)      静态孔隙assertNotSame(实际对象预期,对象)      静态孔隙assertNull(字符串消息,对象对象)      静态孔隙assertNull(对象对象)      静态孔隙assertSame(字符串消息,对象预期,对象实际)      静态孔隙assertSame(实际对象预期,对象)      静态孔隙assertTrue(字符串消息,布尔条件)      静态孔隙assertTrue(布尔条件)      静态无效失败(字符串消息)      静态无效失败()      静态孔隙failNotEquals(字符串消息,对象预期,对象实际)      静态孔隙failNotSame(字符串消息,对象预期,对象实际)      静态孔隙failSame(字符串消息)      静态字符串格式(字符串消息,对象预期,对象实际)      

浅谈Android单元测试的作用以及简单示例