热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

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

前提概要

受人嫌弃的单元测试

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

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

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

多人开发难以处理的问题

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

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

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

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

简单示例

主要就两个文件:

这里写图片描述

package com.example.xujiajia_sx.myexpressotest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  }

  public static int calculate(int a,int b){
    return a+b+1;
  }

}

package com.example.xujiajia_sx.myexpressotest;

import org.junit.Test;

import static org.junit.Assert.*;

/**
 * Created by xujiajia_sx on 2017/8/14.
 */

public class SimpleTest {

  @Test
  public void CalculateTest() throws Exception {
    assertEquals(4, MainActivity.calculate(1,2));
  }
}

这个例子是测试了MainActivity.calculate()方法。可以在不运行这个app的情况下直接通过按SimpleTest .CalculateTest()左边的小三角测试,如下图:

这里写图片描述

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

这里写图片描述

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

Assert方法

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

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

static void assertEquals(boolean expected, boolean actual)

static void assertEquals(String message, long expected, long actual)

static void assertEquals(short expected, short actual)

static void assertEquals(String message, String expected, String actual)

static void assertEquals(String message, int expected, int actual)

static void assertEquals(Object expected, Object actual)

static void assertEquals(String message, boolean expected, boolean actual)

static void assertEquals(String expected, String actual)

static void assertEquals(String message, short expected, short actual)

static void assertEquals(String message, Object expected, Object actual)

static void assertEquals(char expected, char actual)

static void assertEquals(byte expected, byte actual)

static void assertEquals(double expected, double actual, double delta)

static void assertEquals(String message, char expected, char actual)

static void assertEquals(float expected, float actual, float delta)

static void assertEquals(String message, double expected, double actual, double delta)

static void assertEquals(String message, byte expected, byte actual)

static void assertEquals(String message, float expected, float actual, float delta)

static void assertEquals(long expected, long actual)

static void assertEquals(int expected, int actual)

static void assertFalse(String message, boolean condition)

static void assertFalse(boolean condition)

static void assertNotNull(Object object)

static void assertNotNull(String message, Object object)

static void assertNotSame(String message, Object expected, Object actual)

static void assertNotSame(Object expected, Object actual)

static void assertNull(String message, Object object)

static void assertNull(Object object)

static void assertSame(String message, Object expected, Object actual)

static void assertSame(Object expected, Object actual)

static void assertTrue(String message, boolean condition)

static void assertTrue(boolean condition)

static void fail(String message)

static void fail()

static void failNotEquals(String message, Object expected, Object actual)

static void failNotSame(String message, Object expected, Object actual)

static void failSame(String message)

static String  format(String message, Object expected, Object actual)

 总结

这篇文章主要介绍了Android单元测试的作用和简单的示例。但是简单的对方法的测试相信并不能满足求知欲强烈的读者。

下一篇文章笔者会讲述android单元测试中对Activity的测试方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
author-avatar
皮皮美2_160
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有