Android 单元测试(一)概要

2019-01-23  本文已影响0人  散落_a0b3

android测试的三大主体:


各种repository,负责维护APP的数据源,包括本地缓存数据、服务器数据、共享数据、系统数据等。

各种控件的隐藏、显示、状态、内容、加载速度、交互事件等。

各种Controller、Presenter、ViewModel,它作为数据和UI部分的粘合剂,负责处理用户交互以及加载、维护数据,使我们App具有各种完善的功能。

各部分的测试目的和要点


测试资源和依赖关系的处理

android 测试的方式有两种,一种是JUnit,直接编译源码运行在本机的jvm环境中,这种方式要求测试的目标类对android运行环境没有依赖。一种是AndroidJUnit,这种方式将代码部署到真实的android环境中运行,能够支持全方位的测试需求。android的开发环境为测试提供了单独的资源支持,每一个变体(BuildVirant)都会有对应的test和androidTest目录,用来存放res、manifest、代码。

通常而言,我们还要提供mock数据来进行测试,除了在测试代码中使用mock框架动态提供,我们还可以使用android框架的BuildVirant机制,分别为测试和生产环境提供一个变体,即mock和prod,让它们使用不同的数据来源,来提供静态的测试数据。这样的话,我们就有了额外的 2 * 2 + main 一共五个资源目录,可用于存放特定的资源了。那我们如何恰当地使用这些资源类型呢?

我们知道,测试的基本原理,就是控制变量法。即我们用已知的对象和逻辑,来验证我们要测试的对象和逻辑。那么在上面的三个主体中,要能够使用这种控制变量法,最基础的支持就是依赖关系的剥离。只有采用间接依赖,外部初始化其他主体成员的类,我们才能使用mock等技术对它进行独立的测试。

要剥离各主体部分的依赖关系,我们需要使用依赖注入的方式来完成,这样针对各主体部分的资源,我们可以将资源放在不同的目录下面,跟随变体(BuildVirant)进行动态替换。如果我们将资源直接放置到main目录下面,那么我们在生产和测试环境下,都将使用相同的资源。如果我们将它们分别放在mock和prod环境下(路径相同),那么它们就可以被区分开来。通常而言,我们只区分数据部分,因为测试和生产环境使用不同的业务逻辑和UI并不是我们想要的结果,虽然我们同样可以使用相同的方式来区分它们。

如果我们使用了依赖注入框架,比如dagger,它也同样遵循上述的变体规则,如果你想使用mock变体来提供静态测试数据,你可能需要将对应的dagger Module也分变体来实现。

上一篇下一篇

猜你喜欢

热点阅读