【解析Glide2.0源码】Glide中的单元测试

本文介绍了为何关注Glide的单元测试,详细讲解了单元测试的基础知识,包括Android单元测试概念和Robolectric框架的使用,以及在配置和使用过程中遇到的问题。此外,文章深入探讨了GlideTest中的单元测试,特别是如何验证ModelLoader的正确创建和同一ImageView下不同参数导致的ImagePresenter替换。
摘要由CSDN通过智能技术生成

前言

其实,为什么要写一篇文章来专门讲解一下Glide的单元测试呢,主要还是我看了下Glide版本的变迁,发现他做了很多单元测试。这也提醒了我,如果要编写一个性能好的框架,单元测试绝对是必不可少的,所以我想以这边文章来做一些单元测试方面的扫盲和Glide主要做的一些单元测试的类讲解。

本章目标

  • 单元测试知识点扫盲
  • Glide的单元测试讲解

单元测试知识点扫盲

在我们进行单元测试用例之前,首先我们应该通过下面几个方便了解下,在项目中所用到的单元测试,但是由于是几年前过时的单元测试了,我找资料也没有针对性的查找,下面的只是我在找资料过程中,所遇见的好的文章,记录下来以便于以后学习使用。大家如果对单元测试有了解了,也可以跳过这个准备工作,直接到下面开始章节去查看。

1.什么是Android的单元测试?

我们在看到Glide源码目录的时候,都会在Library包中查看到有一个test文件夹,这里放了大量的单元测试用例。很多奇怪的陌生的类,在这里我们可以看下弘洋的文章必知必会 | Android 测试相关的方方面面都在这儿文章介绍很全面。

2.Robolectric

Glide-2.0.0版本中,单元测试还是使用的过时的ActivityTestCase来进行单元测试,由于我在测试过程中出现了一些bug,所以我在它原有的单元测试上更换了新的测试框架Robolectric,让我们不依靠android的设备环境,可以在jvm中去运行进行单元测试,这套框架也是以后Glide版本使用的单元测试框架之一,非常好用的安卓测试框架,大家可以看上面推荐的文章进行系统学习。


在这里插入图片描述


2.1 配置Gradle
  • AndroidStudio的环境
    在这里插入图片描述
  • libray Module build.gradle level file
dependencies {
	...
    //junit
    testImplementation 'junit:junit:4.12'

    //robolectric
    testImplementation "org.robolectric:robolectric:3.8"
    testImplementation 'org.robolectric:shadows-support-v4:3.4-rc2'
    testImplementation "com.android.support.test:monitor:1.0.2"
}
2.2 编写测试用例
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(RobolectricTestRunner.class)
@Config(manifest=Config.NONE)
public class GlideTest
{
   
	 @Test
    public void testGlide()
    {
   
        System.out.println("Hello Glide Tdd");
    }
}

3.Robolectric配置环境中踩过的坑

3.1 无法找到RobolectricTestRunner类问题

刚开始配置的时候,我在@RunWith(RobolectricTestRunner.class)的时候,无法找到
RobolectricTestRunner.class文件,但是我在搜索的时候,在当前项目下是能搜索到,于是我就强行导包,并且运行成功了。估计是IDE出错了,第二天打开IDE以后就能找到了。

3.2 后台任务一直挂起的问题

这里测试环境就配置成功了,这里提示一下,因为我也是第一次配置这个测试环境,踩坑过程中,感觉主要还是需要科学上网,不然一些jar包很难下载下来,速度也很慢。另外需要注意的是在配置过程中针对不同的compileSdkVersion的版本会下载对应的jar包,所以你会看见后台任务总是挂起的,这个时候你不要急于去关闭程序,我们可以根据console打印的日志,打开路径~/.m2/repository/org/robolectric/android-all(也就是本地maven缓存地址)去查看下载情况。如果是创建了文件夹,代表正在下载请耐心的等待,这里需要根据网络情况而定,在github的issue中也有人等了2个小时还没下载下来的。

3.3 资源无法找到异常

有时候,我们查找资源的时候会报错android.content.res.Resources$NotFoundException: Resource ID #0x7f090054,比如在build.gradle文件里面配置。

android {
	...
    testOptions { // <-- You need this
        unitTests {
            includeAndroidResources = true
        }
    }
    ...
}

Glide的单元测试讲解

当我们做好所有的准备工作以后,看下它的单元测试代码,以便于我们对Glide的源码编写过程进行一些深入的了解,在这里我抽取一些部分的代码来进行重点讲解。

GlideTest的单元测试

1.正确创建ModelLoader的类型
单元测试
@RunWith(RobolectricTestRunner.class)
@Config(manifest=Config.NONE)
public class GlideTest
{
   
	 @Override
	protected void setUp() throws Exception {
   
	    super.setUp()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值