Android单元测试介绍

作者: changer0 | 来源:发表于2018-04-14 14:17 被阅读21次

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

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

    Android单元测试分类

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

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

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

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

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

    测试分布法则

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

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

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

    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单元测试介绍

        本文链接:https://www.haomeiwen.com/subject/jwllkftx.html