当前位置:网站首页 > 安全测试 > 正文

sdk测试是用来干什么的(sdk测试是用来干什么的呢)



  1. 在build.gradle中添加以下依赖:
  • 基础配置
 
  • 如果项目里有用到support-v4包,需要如下配置
 
  • 关于MultiDex
    Robolectric是运行在JVM上的,所以也就没有“MultiDex”这回事,如果我们的工程里使用了它,还需如下配置:
 

它hook了MultiDex的实现,让它在install的时候啥也不干。

  1. 通过注解设置测试类的test runner
 
  1. Mac及Linux用户必须注意如下配置

在Mac以及Linux上,第一次使用时,经常会出现一个很诡异的问题,会告诉我们如下错误:

 
img_761962ab25feb5fb688e634fa7b353fe.png
设置JUnit的Working directory
  1. Android Studio 3.0注意事项
    如果Android Studio是3.0及以上版本的,需要加上以下配置,否则运行不起来,会一直报错。
 

场景:我们有一个Activity,里面有一个Button,点击该Button跳转到另外一个Activity。
测试目的:验证用户点击该Button后,确实是跳转到了我们指定的Activity。
具体的布局文件以及Activity代码如下:

 
 

测试代码如下:

 

第一次运行需要比较长的时间,主要是从远程仓库下载robolectric所需的依赖库到本地,请耐心等待即可。

可以通过@Config注解来配置Robolectric运行时的行为。这个注解可以用来注释类和方法,如果类和方法同时使用了@Config,那么方法的设置会覆盖类的设置。如果你有很多测试类都采用同样的配置,那么你可以创建一个基类,通过@Config注解配置该基类,那么其他子类都能共享该配置。

7.4.1 配置constants
 

使用@RunWith(RobolectricTestRunner.class)时,必须要指定@Config(constants = BuildConfig.class),这样它会从build/intermediates/目录下找到manifest、assets、resource等目录并加载相应的资源。

img_73b70265266de3d9cb8bfa5806d84d1f.png

如上图所示,指定该配置后,Robolectric才会加载图中所示文件夹中对应的资源,否则就无法加载manifest、assets、resource等资源,测试也跑不起来。

7.4.2 配置SDK版本
 
7.4.3 配置Application
 

前面说过,在方法上也可以使用@Config来配置,如果类级别与方法级别同时有@Config配置,方法级别上的配置会覆盖类级别的配置。

7.4.4 配置resource、assets、manifest路径

前面介绍配置constants属性时,Robolectric会自动加载build/intermediates目录下的资源文件,可以使用以下配置使Robolectric加载特定的资源文件。

 

这里的路径很容易令人迷惑,必须要说明几点:

  • 如果使用了@Config(constants = BuildConfig.class),资源文件的路径会固定为build目录。避免constants配置与自定义manifest配置一起使用,否则后者配置会不生效。
  • manifest设置的目录base于Unit Test Config里面的”Working Directory”,具体如7.2里的图“设置JUnit的Working directory”所示。
  • resourceDir、assetDir的目录base于manifest的父目录。
 
img_674031cac8514b75d5e936861a3f4ac4.png
自定义manifest目录示意图

该例子配置了一个指定的AndroidManifest.xml文件以及assets文件目录,测试程序读取assets里test.txt文件内容并打印出来。manifest的相对路径就是“UnitTest”工程里的“app”模块所在的文件路径,assetDir的相对路径就是AndroidManifest.xml文件的父目录路径。

7.4.1 生命周期

修改下7.3里面的测试案例代码如下,在各个生命周期回调中修改Button的文本内容。

 

测试代码如下:

 

控制台打印结果如下所示:

 
7.4.2 setupActivity()与buildActivity()

前面的示例中看到有2种创建Activity的方式:

 

这2种方式有什么差别呢,查看setupActivity()的源码可以看到:

 
7.4.3 测试Activity的跳转

在前面7.3中是示例中已经展示了。

7.4.4 测试Toast
 
 
7.4.5 测试Dialog
 
7.4.6 测试资源文件
 
7.4.7 测试Fragment
 

顾名思义就是影子类,Robolectric定义了很多shadow class,用来修改或者扩展Android OS中类的行为。当一个Android中的类被实例化时,Robolectric会去寻找对应的影子类,如果找到了则会创建一个影子对象并与之相关联。每当Android类中的一个方法被调用时,Robolectric会保证其影子类中相应的方法会被先调用。这对所有的方法都适用,包括static和final类型的方法。

 

通过该方法几乎可以获取大部分Android类的shadow class,例如:

 
Shadow Classes
 

Shadows.shadowOf()方法不能作用于自定义shadow class,为了使Robolectric能够识别自定义shadow类,需要采用@Config注解,如下所示:

 

执行该测试方法,控制台打印结果如下:

 

从以上控制台打印结果中可以看到,welcome()方法实际执行的是ShadowCompany中的方法。

Shadowing Constructors

如果需要对构造函数进行shadow,必须实现__constructor__方法,并且该方法的参数必须与构造函数的参数一样。我们稍微修改前面的Company类以及ShadowCompany类,对其构造函数进行shadow。

 

这个时候再执行测试代码,返回结果如下,可以看到Company的构造函数并没有执行。

 
Getting access to the real instance

有时shadow类需要使用它们关联的真实对象,可以通过@RealObject注解声明一个属性来实现。

 
自定义shadow要点
  1. @Implements注解指定需要对哪个类进行shadow;
  2. @Implementation指定需要对哪个方法进行替换;
  3. 使用__constructor__来对构造器进行替换;
  4. @RealObject来引用真实的关联对象;

前面介绍JUnit4的时候讲到,JUnit4中有个叫Parameterized的test runner,能够实现参数化测试,同样Robolectric也提供了同样的功能。

 

运行结果如下:

 
  1. 不支持JNI调用。凡是涉及到JNI调用的方法,都不能使用Robolectric来进行单元测试。对于复杂的应用,或多或少都会有JNI调用,可行的方案是设置一个全局变量来控制是否加载so库。

系列文章:
Android单元测试(一):前言
Android单元测试(二):什么是单元测试
Android单元测试(三):测试难点及方案选择
Android单元测试(四):JUnit介绍
Android单元测试(五):JUnit进阶
Android单元测试(六):Mockito学习
Android单元测试(七):Robolectric介绍
Android单元测试(八):怎样测试异步代码

到此这篇sdk测试是用来干什么的(sdk测试是用来干什么的呢)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 服务器压力测试方案(服务器压力测试方案怎么写)2025-04-24 18:09:06
  • 拒绝访问文件夹,需要使用安全选项卡(拒绝您访问需要使用安全选项卡)2025-04-24 18:09:06
  • sdk测试demo(sdk测试验证码是什么)2025-04-24 18:09:06
  • ip地址换手机会换吗安全吗(ip地址换了手机还一样吗)2025-04-24 18:09:06
  • 安全选项怎么设置(安全选项怎么设置密码)2025-04-24 18:09:06
  • ipv4测试在线测试(ipv6测试网址)2025-04-24 18:09:06
  • 手机安全认证码(手机安全认证码第1位和第2位)2025-04-24 18:09:06
  • 浏览器兼容性测试工具哪个好用点(网站浏览器兼容性测试)2025-04-24 18:09:06
  • 文本框测试用例设计(文本框测试是什么)2025-04-24 18:09:06
  • 存储测试面试题(存储工程师面试题目)2025-04-24 18:09:06
  • 全屏图片