Android单元测试介绍

本篇介绍Android相关的单元测试, 本篇为系列教程的开篇, 对Android单元测试做一个系统介绍.

本系列教程将介绍在Android应用中如何编写本地单元测试和instrumentation测试(设备测试).并通过Android Studio和Gradle来执行这些测试.

Android单元测试分类

Android应用运行在各种各样的设备中.另外,Android框架和其他相关的开源框架都在高速发展.要保证应用正常运行,有必要去写Android应用测试.这将会有助于优化和改善我们的Android应用.

Android的单元测试分为下列两种:

  • 本地单元测试 – 即测试用例运行在JVM中
  • Instrumented 单元测试 – 即测试用例需要Android 系统支持,运行在真机或模拟器中

《Android单元测试介绍》 Android测试分类

相对于在Android设备上部署和运行测试所需的时间,本地的单元测试速度要快很多.如果你需要真正的Android系统环境,应首选本地单元测试,并且仅在Android平台上运行.

如果使用本地单元测试并对Android API有依赖,应该通过模拟框架(mocking framework)来替代它们,例如Mockito.

测试分布法则

我们应该把测试的关注点放在代码的业务逻辑上,下面几条是非常好的测试分布法则:

  • 70-80 % 单元测试来确保基础代码的稳定性
  • 20-30 % 功能测试来确保应用程序的功能正常工作
  • 如果应用程序与其他应用程序组件集成起来,则需要进行一些跨功能测试

《Android单元测试介绍》 测试分布规则

应该至少在一个设备上测试应用,并尽可能的减少配置.另外也应该在具有最高可用配置(例如像素密度,屏幕分辨率)的设备上进行测试,以确保其在这些设备上正常工作.

Android测试工具支持

Google的Android测试支持库(ATSL)项目为Android测试提供了工具. 例如 AndroidJUnitRunner.

如果你运行本地单元测试,那么工具会创建一个特殊版本的android.jar (也被称为Android 模拟Jar包). 这个被修改后的 JAR 文件用来提供给单元测试,以便所有Android库中的字段,方法和类都可用. 在默认情况下,对Android可模拟JAR的任何调用都会导致异常,但是你可以将Android配置为返回默认值.当然最好的方式是使用一些Mock库,具体详情可以见Android Developer官方文档.

该库提供了JUnit兼容的测试运行器(AndroidJunitRunner)、Espresso测试框架和UI Automator 测试框架. Espresso测试框架可用于测试应用程序的用户界面,UI Automator 允许编写跨应用程序的功能测试.

AndroidJunitRunner 通过InstrumentationRegistery 提供了对 instrumentation API 的访问.

  • InstrumentationRegistry.getInstrumentation(), 返回当前运行的Instrumentation
  • InstrumentationRegistry.getContext(), 返回Instrumentation包下的Context
  • InstrumentationRegistry.getTargetContext(), 返回目前应用的Context
  • InstrumentationRegistry.getArguments(), 返回传递给此Instrumentation的参数Bundle的副本.当你想访问传递给你测试工具的命令行参数时非常有用

它还可以通过ActivityLifecycleMonitorRegistry访问生命周期.

Android工程测试结构

以下是你的应用和测试代码的默认目录结构:

  • app/src/main/java – 主要应用程序构建的源代码
  • app/src/test/java – 用于任何可以运行在JVM单元测试
  • app/src/androidTest/java – 用于应该运行在Android设备上的测试

遵循上述结构,Android的构建系统就会在相应的目标(JVM或者Android设备)运行测试.

解决”error duplicate files in path”的错误

如果你收到下面的错误:”error duplicate files in path. Path in archive: LICENSE.txt”,你可以将以下内容添加到app/build.gradle文件中:

android {
    packagingOptions {
    exclude 'LICENSE.txt'
    }
}

《Android单元测试介绍》 敲行代码再睡觉

    原文作者:changer0
    原文地址: https://www.jianshu.com/p/ec59af2f1fa2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞