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


[图片]


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-简单工厂模式(静态工厂模式)java实现

介绍 简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。 意图 提供一个类&#xff0c;负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程 角色及其职责 (1)工厂(Creator…

GIT-HUB上传大文件.docx

下载git Github上传大文件&#xff08;&#xff1e;25MB&#xff09;教程_UestcXiye的博客-CSDN博客 上传流程 https://blog.csdn.net/weixin_35770067/article/details/116564429?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Ed…

链表——LinkedList类的概述和实现

LinkedList类 1.1LinkedList类概述 LinkedList类底层是基于双向链表结构实现的&#xff0c;不同于ArrayList类和Vector类是基于数组实现的&#xff1b;LinkedList类是非线程安全的&#xff1b;LinkedList类元素允许为null&#xff0c;允许重复元素&#xff1b;LinkedList类插…

融云:从「对话框」跳进魔法世界,AIGC 带给社交的新范式

8 月 17 日&#xff08;周四&#xff09;&#xff0c;融云将带来直播课-《北极星如何协助开发者排查问题与预警风险&#xff1f;》欢迎点击上方报名~ AIGC 与社交结合的应用主要分两种&#xff0c;一是发乎于 AIGC&#xff0c;以大模型为基础提供虚拟伴侣等服务的 App&#xff…

Python web实战之Django 的 RESTful API 设计详解

关键词: Python, Web 开发, Django, RESTful API 1 API的一些事儿 1.1 什么是API&#xff1f; API是应用程序编程接口&#xff08;Application Programming Interface&#xff09;的缩写。它是一种定义了不同软件组件之间交互方式的规范。API允许不同的应用程序之间进行通信和…

kubernetes基于helm部署gitlab-operator

kubernetes基于helm部署gitlab-operator 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab-operator。 先决条件 已运行的 Kubernetes 集群负载均衡器&#xff0c;为ingress-nginx控制器提供EXTERNAL-IP&#xff0c;本示例使用metallb默认存储类&#xff0c;为gitlab p…

AWD攻防学习总结(草稿状态,待陆续补充)

AWD攻防学习总结 防守端1、修改密码2、备份网站3、备份数据库4、部署WAF5、部署文件监控脚本6、部署流量监控脚本/工具7、D盾扫描&#xff0c;删除预留webshell8、代码审计&#xff0c;seay/fortify扫描&#xff0c;漏洞修复及利用9、时刻关注流量和积分信息&#xff0c;掉分时…

Java经典面试题总结(一)

Java经典面试题总结&#xff08;一&#xff09; 题一&#xff1a;Java编译运行原理题二&#xff1a;JDK&#xff0c;JVM&#xff0c;JRE三者之间的关系题三&#xff1a;谈一下对冯诺依曼体系的了解题四&#xff1a;重载与重写的区别题五&#xff1a;拆箱装箱是指什么&#xff1…

在矩池云使用ChatGLM-6B ChatGLM2-6B

ChatGLM-6B 和 ChatGLM2-6B都是基于 General Language Model (GLM) 架构的对话语言模型&#xff0c;是清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同发布的语言模型。模型有 62 亿参数&#xff0c;一经发布便受到了开源社区的欢迎&#xff0c;在中文语义理解和对话生成上有…

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…

学习pytorch

学习pytorch 1. 环境安装配置镜像源conda命令记录遇到的问题1. torch.cuda.is_available() False 1. 环境安装 B站小土堆视频 配置镜像源 conda config --show channels conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/mainhttp://www.m…

canvas实现代码雨

学习抖音&#xff1a; 渡一前端必修课 效果图&#xff1a; 全部代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&…

idea使用protobuf

本文参考&#xff1a;https://blog.csdn.net/m0_37695902/article/details/129438549 再次感谢分享 什么是 protobuf &#xff1f; Protocal Buffers(简称protobuf)是谷歌的一项技术&#xff0c;用于结构化的数据序列化、反序列化。 由于protobuf是跨语言的&#xff0c;所以用…

【Linux命令行与Shell脚本编程】第十六章 Shell函数

Linux命令行与Shell脚本编程 第一章 文章目录 Linux命令行与Shell脚本编程六.函数6.1.脚本函数基础6.1.1.创建函数6.1.2.使用函数 6.2.函数返回值6.2.1.默认的退出状态码6.2.2.使用return命令6.2.3.使用函数输出 6.3.函数中使用变量6.3.1.向函数传递参数6.3.2.在函数中处理变量…

Spring 是如何解决循环依赖问题的?

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;项目场景&#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信&#xff0c;每隔 5s 传输一批传感器数据(不是很大) 问题描述 我们都知道&#xff0c;如果在代码中&#xff0c;将两个…

机器学习深度学习——循环神经网络RNN

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习—语言模型和数据集 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助…

c++ 运算符重载

为什么要有运算符重载&#xff1f; 观察下列代码&#xff0c;当我们要比较两个日期类(自定义类型)的大小的时候&#xff0c;我们没法使用编译器自带的小于<符号来比较&#xff0c;就像这样的形式&#xff1a;d1 < d2 我们需要自己写一个函数来进行比较&#xff0c;这是很…

YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5配置了5种不同大小的网络模型&#xff0c;分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;其中YOLOv5n是网络深度和宽度最小但检测速度最快的模型&#xff0c;其他4种模型都是在YOLOv5n的基础上不断…

深度补全算法-CompletionFormer-已开源效果最好

《CompletionFormer: Depth Completion with Convolutions and Vision Transformers 》 摘要 给定稀疏深度和相应的 RGB 图像&#xff0c;深度补全旨在整个图像中空间传播稀疏测量值&#xff0c;以获得密集的深度预测。尽管基于深度学习的深度补全方法取得了巨大进步&#xff0…

分清性能测试,负载测试,压力测试这三个的区别

做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff0c;在工作之余也做了一些测试方面的知识的补充。不足之处&#xff0c;还请大家多多交流&#xff0c;互相学习。 …