Android 开发如何进行单元测试

本文介绍了Android开发中进行单元测试的重要性,解释了单元测试的概念和优势,并详细阐述了如何使用Android Junit、Mockito和Powermock进行单元测试,包括对不同类型的函数和对象的测试,以及对单例的mock操作。
摘要由CSDN通过智能技术生成

什么是单元测试

单元测试是由一组独立的测试构成,每个测试针对软件中的一个单独的程序单元。单元测试并非检查程序单元直接是否能够合作良好,而是检查单个程序单元的行为是否正确。

事实上,单元测试是一种验证行为,测试和验证程序中的每一项的正确性。

为什么要进行单元测试

对于单元测试,人们往往存在很多误解:

  1. 浪费时间太多,本身项目的时间就很紧张,没有时间去写单元测试。
  2. 过度的依赖测试人员,认为软件开发人员不应该参与单元测试。
  3. 认为单元测试不必要,代码写得很好了,no bug,no warning。
  4. 老代码结构混乱,耦合度高,为了写单元测试修改代码结构,意义不大,投入跟产出不成比例。

单元测试真的这么鸡肋么?No,No,No!!!

试想

  1. 测试人员给你报了一个bug,但是由于之后的merge失误导致代码丢失,或者别人修改代码导致这个bug再次复现。

  2. 重构代码的时候,被bug淹没。造成你持续不断的改bug,持续不断的加班。

  3. 明明很正常的功能,怎么现在突然不能用了?是接口的问题,还是有人修改了这个功能的逻辑?

    。。。

如果你也经常遇到这些困惑,那么你就需要对项目进行单元测试了。

因为单元测试具有以下优势:

  1. 帮助理解需求

    单元测试应该反映Use Case,把被测单元当成黑盒测试其外部行为。

  2. 提高实现质量

    单元测试不保证程序做正确的事,但能帮助保证程序正确地做事,从而提高实现质量。

  3. 测试成本低

    相比集成测试、验收测试,单元测试所依赖的外部环境少,自动化程度高,时间短,节约了测试成本。

  4. 反馈速度快

    单元测试提供快速反馈,把bug消灭在开发阶段,减少问题流到集成测试、验收测试和用户,降低了软件质量控制的成本。

  5. 利于重构

    由于有单元测试作为回归测试用例,有助于预防在重构过程中引入bug。

  6. 文档作用

    单元测试提供了被测单元的使用场景,起到了使用文档的作用。

  7. 对设计的反馈

    一个模块很难进行单元测试通常是不良设计的信号,单元测试可以反过来指导设计出高内聚、低耦合的模块。

为什么要做单元测试?

怎么进行单元测试

Android 单元测试分类

Android 单元测试分为两大类:

app/src
     ├── androidTestjava (Instrumented 单元测试、UI测试)
     ├── main/java (业务代码)
     └── test/java  (Local 单元测试)
  1. Local test:

    运行在本地的JVM虚拟机上,不依赖Android框架。

  2. Instrumented tests:

    通过Android系统的Instrumented测试框架,运行测试代码在真实手机上。

Android Junit + Mockito + Powermock单元测试方案

Junit + Mockito + Powermock简介

Junit 是一个Java语言的单元测试框架
Mockito 是一个Mock框架,我们可以通过Mockito框架创建配置mock对象。
Powermock 可以针对static,final,private方法进行mock

Junit + Mockito + Powermock使用

强烈建议你熟读以下内容,来熟悉Junit + Mockito + Powermock的使用。

  1. Mockito 中文文档 ( 2.0.26 beta )
  2. Mockito reference documentation
  3. powermock wiki
  4. Unit tests with Mockito - Tutorial
比如说我们要对Calculate类进行单元测试
public class Calculate {
   

    private int mPrivate;

    private final int mPrivateFinal = 0;

    private static int mPrivateStatic = 0;

    private static final int mPrivateStaticFinal = 0;

    public int mPublic;

    public final int mPublicFinal = 0;

    public static int mPublicStatic = 0;

    public static final int mPublicStaticFinal = 0;

    public void voidPublicMethod(int a, int b) {
   
        return;
    }

    public int addPublicMethod(int a, int b) {
   
        return a + b;
    }

    private int addPrivateMethod(int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值