高德地图 SDK 接口测试接入(AndroidTest 上手)
学习资料
官方文档
在 Android 平台上测试应用 | Android 开发者 | Android Developers
测试了解
【玩转Test】开篇-Android test 介绍
Android单元测试全解_android 单元测试_一代小强的博客-CSDN博客
Android单元测试-对Activity的测试_activitytestrule_许佳佳233的博客-CSDN博客
单元测试注解相关
ActivityScenarioRule懒加载_airgreen的博客-CSDN博客
学习资料可以了解一下,不用进行深入,重点需要的准备在下面。
前置准备
-
按照 Android 项目导入高德 SDK 使用(从小白到入门) 这篇文档,把高德地图 SDK 环境给部署在自己的空项目中,然后能够正常的调用基本高德地图SDK
-
学习SDK这部分看到什么程度,了解即可。不熟悉 可以 照着文档 控件交互-与地图交互-开发指南-Android 地图SDK | 高德地图API 调用SDK接口写几个简单的功能能够正常运行展示即可)
-
了解 Junit 框架的一些注解和断言方法就没问题,不用深入
步骤记录
简单上手 AndroidTest 来测试验证高德地图SDK的接口,简单记录一下操作过程
0、首先我们有一个部署好高德 SDK 环境的项目,能够正常显示一个地图 MapView 。
1、把下列配置代码 贴到模块的 build.gradle 文件里面,在 dependencies 闭包中
testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'//测试添加implementation 'androidx.recyclerview:recyclerview:1.1.0'implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// implementation 'pub.devrel:easypermissions:2.0.1'implementation 'com.google.code.gson:gson:2.8.5'androidTestImplementation 'com.android.support.test:runner:1.0.2'
// androidTestImplementation 'com.android.support.test:rules:1.0.2'androidTestImplementation 'androidx.test:rules:1.1.0'androidTestImplementation 'com.android.support:support-annotations:28.0.0'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
2、我们在 AndroidTest 的 test 测试类中默认就能看到有下列代码,之后我们就会在 androidTest 目录下的类中写测试用例代码。
![[图片]](https://img-blog.csdnimg.cn/ab843760305a4d4ab87050833872f541.png)
3、我们在 layout 建一个页面视图activity_exercise.xml,添加一个 mapView 标签即可,在对应的 Java类 ExerciseActivity 显示地图,这里可以设置一个默认显示的地图中心点,方便后面进行测试验证。
public class ExerciseActivity extends AppCompatActivity {public MapView mapView;public static final LatLng SHANGHAI = new LatLng(31.238068, 121.501654);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_exercise);mapView = findViewById(R.id.map);// findViewByid()得到mapView一定要在onCreate里面mapView.onCreate(savedInstanceState);// 显示地图changeToCenter();// 改变地图的中心点}/*** 获取到该页面的 map控制对象* @return*/public AMap getMap(){// 测试类可以通过 activity 拿到这个AMap对象进行 验证 高德地图对象 的其他接口return ((MapView)findViewById(R.id.map)).getMap();}// 改变地图默认显示的中心点public void changeToCenter(){AMap aMap = mapView.getMap();aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(SHANGHAI,10.0f,10.0f,10.0f)));}}
可以运行一下这个App代码,看在手机上是否运行成功,显示上海为中心点
![[图片]](https://img-blog.csdnimg.cn/624f565c925744449e7343d14426422c.png)
5、在 AndroidTest 测试类中加入 ActivityTestRule @Rule,表明这个测试类对哪个 activity 进行测试(之后在每次测试用例代码执行前然后进行 Activity 初始化,进行 Activity 启动等操作)
- ActivityTestRule - Android中文版 - API参考文档
- JUnit单元测试6—@Rule注解
这个类和注解的作用可以看一下文档了解一下,在测试方法执行之前对Activity初始化
![[图片]](https://img-blog.csdnimg.cn/4464009d96824aca92c3133f1b53e69e.png)
@Rule
public ActivityTestRule<被测试类> activityTestRule = new ActivityTestRule<>(被测试类.class);
6、拿到 Activity页面中的 AMap对象,对其进行测试。
被测试的 activity 类中的方法,都可以通过 activityTestRule.getActivity() 的方法进行拿到
注意:最好记住,线程睡眠几秒,有时候set之后直接get,测试的程序执行太快,在手机Map上有些元素还没加载,所以在 get 之前可以 强制线程等待几秒
/*** 设置一个中心点,对于中心点的坐标进行测试*/@Testpublic void testCase2(){Log.i("START TESTCASE1","测试 中心点坐标 的用例开始执行!!!");LatLng SHANGHAI = new LatLng(31.238068, 121.501654);AMap aMap = activityTestRule.getActivity().getMap();
// aMap.moveCamera(CameraUpdateFactory.newCameraPosition(CameraPosition.builder().target(SHANGHAI).bearing(10.0f).tilt(10.0f).zoom(10.0f ).build()));try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}Assert.assertEquals(SHANGHAI.latitude,aMap.getCameraPosition().target.latitude,0.1);// 第三个参数dalt是误差,float、double比较都需要写一个误差值,精度有时候设置的不一样,造成误差}
7、点击执行,查看用例执行的结果。
![[图片]](https://img-blog.csdnimg.cn/be4e314140504db683640a63ff064e6d.png)
8、之后我们就可以在其他的 testcase 方法中对 高德 aMap 对象的其他接口方法进行验证,查看断言结果,来熟悉测试用例编写的过程。
/*** 验证 设置map_type 的方法是否正常*/
public void testCase3(){Log.i("START TESTCASE1","测试 MAP_TYPE的用例开始执行!!!");AMap aMap = activityTestRule.getActivity().getMap();aMap.setMapType(AMap.MAP_TYPE_NIGHT);try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}Assert.assertEquals("测试case3未通过!",AMap.MAP_TYPE_NIGHT,aMap.getMapType());}/*** 验证 地图 控件显示 是否符合 预期*/
@Test
public void testCase4() throws InterruptedException {Log.i("START TESTCASE2", "测试 地图的UI控件是否按照预期显示");AMap aMap = activityTestRule.getActivity().getMap();UiSettings settings = aMap.getUiSettings();// 显示指南针,预期结果为trueboolean expect = true;settings.setCompassEnabled(expect);// 等待 3stry {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}boolean actual = settings.isCompassEnabled();// 然后断言Assert.assertEquals("未通过测试用例!!",expect,actual);
}
相关文章:
高德地图 SDK 接口测试接入(AndroidTest 上手)
学习资料 官方文档 在 Android 平台上测试应用 | Android 开发者 | Android Developers 测试了解 【玩转Test】开篇-Android test 介绍 Android单元测试全解_android 单元测试_一代小强的博客-CSDN博客 Android单元测试-对Activity的测试_activitytestrule_许佳佳233的博客…...
省电模式稳定电压显示IC32×4 LCD显示驱动芯片
简述 VK1C21A是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM) 的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发 送显示数据,也可通过指令进入省电模式。具备高抗干扰&a…...
分布式架构的观测
分布式架构的观测 日志日志的输出收集与缓冲加工与聚合存储与查询 追踪数据收集 度量 在一个分布式应用中,如果出现了某个异常,那我们必然不可能只依靠 awk、grep 等命令来查看日志分析问题,往往分布式架构的一个异常都贯通多个节点ÿ…...
交替方向乘子
目录 一,交替方向乘子ADMM 1,带线性约束的分离优化模型 2,常见优化模型转带线性约束的分离优化模型 3,带线性约束的分离优化模型求解 4,交替方向乘子ADMM 本文部分内容来自教材 一,交替方向乘子ADMM …...
9-数据结构-栈(C语言版)
数据结构-栈(C语言版) 目录 数据结构-栈(C语言版) 1.栈的基础知识 1.入栈,出栈的排列组合 情景二:Catalan函数(计算不同出栈的总数) 2.栈的基本操作 1.顺序存储 (1)顺序栈-定义…...
C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序
1 分位数Quantile 分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…...
实践分享:小程序事件系统设计
微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件&#…...
无涯教程-Perl - bless函数
描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…...
Java关键字:final解析
目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常࿰…...
LeetCode--HOT100题(25)
目录 题目描述:141. 环形链表(简单)题目接口解题思路代码 PS: 题目描述:141. 环形链表(简单) 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连…...
外卖项目,登录设计,nginx反向代理,MD5明文加密
.gitignore文件里的东西是进行排除,不用git进行管理。登录设计, controller 接收并封装参数调用service方法查询数据库封装结果并响应 登录成功后,生成jwt令牌 Service层 调用mapper查询数据库密码比对返回结果Mapper 编写sql语句为什么前端不…...
【云原生】kubernetes在Pod中init容器的作用和使用
目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器,在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像…...
springboot+vue分页
java项目 导包 <!--springboot整合pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.1</version></dependency>前端 vue项目…...
【linux】ssh 和adb connect区别
问:ssh 与ping的区别 答:SSH(Secure Shell)和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议,用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式,可以在不安全的网络上进行远程登…...
iPhone手机怎么恢复出厂设置(详解)
如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题,恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置?简单来说,就是让手机重新变成一张白纸,将手机所有数据都进行格式化,只保留原…...
灵活利用ChatAI,减轻工作任务—语言/翻译篇
前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景,并提供文本翻译与校对等功能。通过与ChatAI互动,我们能够更好地利用技术来拓展自己在语言领域的能力和知识,实现更加无障…...
【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
python 定时器,如何进行周期性的函数运行、状态检查,百分比计算?
文章大纲 schedulescheschedule线程实现1实现2实现3协程(coroutine)参考文献schedule https://stackoverflow.com/questions/373335/how-do-i-get-a-cron-like-scheduler-in-python https://docs.python.org/3/library/sched.html sche schedule import schedule import ti…...
无涯教程-Perl - fcntl函数
描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…...
docker 命令解析
docker命令解析的文章参考 build 和 commit build适合从头创建一个清晰干净的镜像。 build是从Dockfile产生新的镜像,对于使用者能清晰的知道镜像中包含了哪些内容。commit适合将已有的容器打包提供给其他使用者。 commit是从已经存在的容器产生镜像,这…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
