高德地图 SDK 接口测试接入(AndroidTest 上手)

news2024/10/7 6:51:21

学习资料


官方文档

在 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 目录下的类中写测试用例代码。


[图片]


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);

    @Override
    protected 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代码,看在手机上是否运行成功,显示上海为中心点


[图片]


5、在 AndroidTest 测试类中加入 ActivityTestRule @Rule,表明这个测试类对哪个 activity 进行测试(之后在每次测试用例代码执行前然后进行 Activity 初始化,进行 Activity 启动等操作)


- ActivityTestRule - Android中文版 - API参考文档
- JUnit单元测试6—@Rule注解


这个类和注解的作用可以看一下文档了解一下,在测试方法执行之前对Activity初始化


[图片]


@Rule
public ActivityTestRule<被测试类> activityTestRule = new ActivityTestRule<>(被测试类.class); 

6、拿到 Activity页面中的 AMap对象,对其进行测试。


被测试的 activity 类中的方法,都可以通过 activityTestRule.getActivity() 的方法进行拿到


注意:最好记住,线程睡眠几秒,有时候set之后直接get,测试的程序执行太快,在手机Map上有些元素还没加载,所以在 get 之前可以 强制线程等待几秒


  /**
     * 设置一个中心点,对于中心点的坐标进行测试
     */
    @Test
    public 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、点击执行,查看用例执行的结果。


[图片]

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();

    // 显示指南针,预期结果为true

    boolean expect = true;
    settings.setCompassEnabled(expect);

    // 等待 3s
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }

    boolean actual = settings.isCompassEnabled();

    // 然后断言
    Assert.assertEquals("未通过测试用例!!",expect,actual);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC的架构有什么优势?——异常处理与文件上传(五)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

PHP8定义字符串的方法-PHP8知识详解

字符串&#xff0c;顾名思义&#xff0c;就是将一堆字符串联在一起。字符串简单的定义方法是使用英文单引号&#xff08; &#xff09;或英文双引号&#xff08;" "&#xff09;包含字符。另外&#xff0c;还可以使用定界符定义字符串。本文还介绍了字符串的连接符。…

脑动极光冲刺上市:盈利能力存疑,永泰生物董事长谭铮为控股股东

8月8日&#xff0c;脑动极光医疗科技有限公司&#xff08;下称“脑动极光”&#xff09;向港交所递交招股书&#xff0c;准备在港交所主板上市&#xff0c;中金公司和浦银国际为其保荐机构。脑动极光在招股书中表示&#xff0c;其是一家根据上市规则18A寻求在港交所上市的生物科…

【80天学习完《深入理解计算机系统》】第二天 2.2 整数的表示【有符号数,无符号数,符号数的扩展,有无符号数的转变】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

重发布选路问题

一、思路 &#xff1b; 1.增加不优选路开销解决选路不佳问题 2.用增加开销的方式使R1 不将ASBR传的R7传给另一台ASBR解决R1、R2、R3、R4pingR7环回环路 二、操作 ------IP地址配置如图 1.ospf及rip的宣告 rip&#xff1a; [r1]rip 1 [r1-rip-1]version 2 [r1-rip-1]netw…

【android】mac mini m2安装android studio

文章目录 一、环境搭建1.1 安装路径1.2 mac arm1.3 安装android studio 二、安装sdk三、更新sdk3.1 关闭代理3.2 重新更新sdk 四、更新api五、项目创建六、gradle安装七、avd八、问题&#xff1a;build tools缺失九、编译运行小结 一、环境搭建 1.1 安装路径 windows&#xf…

HTML5 中新增了哪些表单元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML5 中新增了的表单元素⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚…

大数据培训课程-《机器学习从入门到精通》上新啦

《机器学习从入门到精通》课程是一门专业课程&#xff0c;面向人工智能技术服务&#xff0c;课程系统地介绍了Python编程库、分类、回归、无监督学习和模型使用技巧以及算法和案例充分融合。 《机器学习从入门到精通》课程亮点&#xff1a; 课程以任务为导向&#xff0c;逐步学…

linux之find命令

概览 Linux下find命令在目录结构中搜索文件&#xff0c;并执行指定的操作。Linux下find命令提供了相当多的查找条件&#xff0c;功能很强大。由于find具有强大的功能&#xff0c;所以它的选项也很多&#xff0c;其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络…

ESP32 Max30102 (1)检测 心率

1. 运行效果 未检测效果如下 检测效果如下

第九次作业

1. SSL工作过程是什么&#xff1f; 当客户端向一个 https 网站发起请求时&#xff0c;服务器会将 SSL 证书发送给客户端进行校验&#xff0c;SSL 证书中包含一个公钥。校验成功后&#xff0c;客户端会生成一个随机串&#xff0c;并使用受访网站的 SSL 证书公钥进行加密&#xf…

算法基础之插入排序

1、插入排序基本思想 插入排序的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place排序&#xff08;即只需用到O(1)的额外空间的排序&#xff09;&a…

Mobaxterm 突破 14个 session 限制

mobaxterm 可以说非常好用&#xff0c;但是免费版对会话有限制&#xff0c;对于有很多虚拟机会话需要存储的我来说确实太少了。 超过限制时&#xff0c;提示如下&#xff0c;再新建的 session 将不会被存储&#xff0c;说明下次登陆还需要输入一遍 ip、账号密码。 Mobaxterm 突…

剑指Offer68-I.二叉搜索树的最近公共祖先 C++

1、题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也…

基于Doris实时数据开发的一些注意事项

300万字&#xff01;全网最全大数据学习面试社区等你来&#xff01; 最近Doris的发展大家是有目共睹的。例如冷热分离等新特性的持续增加。使得Doris在易用和成本上都有大幅提升。 基于Doris的一些存储实时数仓在越来越多的场景中开始有一些实践。大家也看到了这种方案频繁出现…

【PostgreSQL内核学习(十一)—— OpenGauss源码学习(CopyTo)】

可优化语句执行 概述什么是列存储&#xff1f;列存的优势 相关函数CopyToCStoreCopyToCopyStatetupleDescCStoreScanDesc CStoreBeginScanRelationSnapshotProjectionInfo GetCStoreNextBatchRunScanFillVecBatchCStoreIsEndScan CStoreEndScan 声明&#xff1a;本文的部分内容…

模拟实现消息队列项目(系列5) -- 服务器模块(虚拟主机)

目录 前言 1. 创建VirtualHost 1.1 定义虚拟主机的相关属性 1.2 VirtualHost 构造方法 1.3 交换机和队列的创建和删除 1.3.1 交换机操作 1.3.2 队列操作 1.4 绑定的创建和删除 1.5 发送消息到指定的队列/交换机 2. 实现路由规则Router 2.1 checkBindingKey() 2.2 checkRoutin…

VS + Qt Include宏指向的路径错误或者project特性的值无效

如果你电脑上有多个Qt版本&#xff0c;不同项目又依赖不同的Qt版本&#xff0c;就会偶尔出现Qt Include宏指向的Qt路径并不是当前依赖的Qt路径。有时候还会出现project特性的值无效&#xff0c;路径中含有非法字符错误&#xff0c;如下图所示 这个问题的解决办法就是删除工程目…

Android OkHttp源码分析--拦截器

拦截器责任链&#xff1a; OkHttp最核心的工作是在 getResponseWithInterceptorChain() 中进行&#xff0c;在进入这个方法分析之前&#xff0c;我们先来了 解什么是责任链模式&#xff0c;因为此方法就是利用的责任链模式完成一步步的请求。 拦截器流程&#xff1a; OkHtt…

支付整体架构

5.4 支付的技术架构 架构即未来&#xff0c;只有建立在技术架构设计良好的体系上&#xff0c;支付机构才能有美好的未来。如果支付的技术体系在架构上存在问题&#xff0c;那么就没有办法实现高可用性、高安全性、高效率和水平可扩展性。 总结多年来在海内外支付机构主持和参与…