自动化 单元测试Test

XCTest测试框架(单元测试XCTests、性能测试XCPPerformanceTests、用户界面测试XCUItests)
单元测试XCTests:测试应用中事件或逻辑是否预期工作。
用户界面测试XCUItests:测试用户与应用的UI交互(如点击按钮、滑动屏幕)。
性能测试XCPPerformanceTests:量化测试代码的性能并在代码更改后跟踪变化。
测试断言:XCTest提供断言API供验证结果(XCTAssertTrue()/XCTAssertFalse()/XCTAssertEqual() )。
集成和运行:可直接从Xcode工具的测试导航器运行(XCTest集成在Xcode中)。
测试报告:Xcode为执行的XCTest测试生成详细的测试报告。

1.创建Native项目包时伴随创建测试(环境)或通过‘测试导航’菜单>
在这里插入图片描述
2.测试(环境)文件夹 xxTests/xxUITests
3.环境下测试文件的在这里插入代码片具体分析
在这里插入图片描述

//  自动化测试 环境
//  KeepThreadAliveTests.m
//  KeepThreadAliveTests
//
//  Created by haijunyan on 2023/12/9.
//#import <XCTest/XCTest.h>@interface KeepThreadAliveTests : XCTestCase@end@implementation KeepThreadAliveTests- (void)setUp {//setUp当前测试类初始化事件(首先被调用)(资源准备)}- (void)tearDown {//tearDown销毁事件(资源的清理销毁/最后被调用)}- (void)testExample {//测试用例函数(功能测试用例)//XCTAssert断言/相关函数验证结果
}- (void)testPerformanceExample {//性能测试函数(性能测试用例)//量化块measureBlock的IMP被默认执行10次并输出对应的耗时报告//IMP耗时报告[self measureBlock:^{}];
}//测试函数:1.void 2.‘-’实例事件且无入参3.test开头
//自定义测试函数的执行顺序:与函数名中test后字符码大小有关(如 -(void)test001XXX先于-(void)test002XXX 执行)
//运行测试环境快捷键:CMD + U
//断言API(系统提供且可供调用)
//XCTFail(format…)生成一个失败的测试
//XCTAssertNil(a1, format...)为空判断,a1为空时通过,反之不通过
//XCTAssertNotNil(a1, format…)不为空判断,a1不为空时通过,反之不通过;
//XCTAssert(expression, format...)当`expression`求值为 `TRUE`时通过
//XCTAssertTrue(expression, format...)当`expression` 求值为`TRUE`时通过
//XCTAssertFalse(expression, format...)当`expression` 求值为`False`时通过
//XCTAssertEqualObjects(a1, a2, format...)判断相等`[a1 isEqual:a2]`值为YES时通过,其中一个不为空时,不通过
//XCTAssertNotEqualObjects(a1, a2, format...)判断不等, `[a1 isEqual:a2]`值为 `False` 时通过
//XCTAssertEqual(a1, a2, format...)判断相等(`a1 == a2`是否返回一个`YES`)(当a1和a2是 C语言标量、结构体或联合体时使用,实际测试发现 `NSString` 也可以)
//XCTAssertNotEqual(a1, a2, format...)判断不等(当a1和a2是 C语言标量、结构体或联合体时使用)
//XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...) 判断相等(`double`或`float`类型)提供一个误差范围,当在误差范围(`+/-accuracy`)以内相等时通过测试
//XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判断不等(`double`或`float`类型)提供一个误差范围,当在误差范围以内不等时通过测试
//XCTAssertThrows(expression, format...) 异常测试,当 `expression`发生异常时通过;反之不通过;
//XCTAssertThrowsSpecific(expression, specificException, format...)异常测试,当`expression`发生 `specificException` 异常时通过;反之发生其他异常或不发生异常均不通过
//XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...) 异常测试,当`expression` 发生具体异常、具体异常名称的异常时通过测试,反之不通过
//XCTAssertNoThrow(expression, format…)异常测试,当`expression`没有发生异常时通过测试
//XCTAssertNoThrowSpecific(expression, specificException, format...)异常测试,当`expression`没有发生具体异常、具体异常名称的异常时通过测试,反之不通过
//XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...) 异常测试,当`expression`没有发生具体异常、具体异常名称的异常时通过测试,反之不通过
//代码覆盖率越高说明测试环境涉及的功能越全(测试质量保障)
//点击'editscheme',对应的tagart->test->codeCoverage- (void)testAsync {XCTestExpectation *except = [self expectationWithDescription:@"异步请求测试用例"];
//    [self.viewModel requestData:^(BOOL success) {
//        XCTAssertTrue(success);//调用fulfill后,表示异步逻辑完成
//        [except fulfill];
//    }];[self waitForExpectationsWithTimeout:10 handler:^(NSError * _Nullable error) {}];
}//测试(逻辑部分)几点建议:
//在编码时,要尽量按照MVVM的模式进行开发,相比MVC模式,MVVM的逻辑代码都封装在VM里面,更利于进行脱离UI的测试。可以设想,如果将逻辑方法都写在View或ViewController中,则执行测试用例时就不得不引入很多额外的页面UI组件。
//编写测试用例时,有3个核心点,即输入,输出和结果判定。通过输入来设置测试用例的初始状态,通过对输出的结果判定来决定测试用例是否通过
//编写的测试函数要尽量符合下面特性:功能单一,有输入有输出。
//函数有输入参数,没有返回值时,需要对输入的参数进行修改,则这种场景编写测试用例时,要判断的是执行函数操作后的原始变量是否符合预期。
//函数没有输入参数,没有返回值时,其作用只是执行一段逻辑操作,例如存储文件,修改文件等。这时我们可以修改下功能函数,在函数内返回操作成功或失败的结果,测试用例使用此结果来作为是否通过的标准。@end
- (void)testLaunchPerformance {//测试 启动时长性能if (@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *)) {//衡量启动应用所耗时长[self measureWithMetrics:@[[[XCTApplicationLaunchMetric alloc] init]] block:^{//IMP默认多次启动执行(查看每次时长,对比结果)[[[XCUIApplication alloc] init] launch];}];}
}

备注:
单元测试

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

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

相关文章

云手机解决海外社媒运营的诸多挑战

随着海外社交媒体运营的兴起&#xff0c;如何有效管理多个账户成为了一项挑战。云手机作为一种新兴的解决方案&#xff0c;为海外社媒运营带来了前所未有的便利。 云手机的基本原理是基于云计算和虚拟化技术&#xff0c;允许用户在物理手机之外创建和使用多个虚拟手机。这种创新…

校园论坛系统

文章目录 校园论坛系统一、项目演示二、项目介绍三、10000字论文参考四、系统部分功能截图五、部分代码展示六、底部获取项目和10000字论文参考&#xff08;9.9&#xffe5;&#xff09; 校园论坛系统 一、项目演示 校园论坛系统 二、项目介绍 基于springbootvue的前后端分离…

SpringBoot3 + uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作(最新)

SpringBoot3 uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作 最终效果图uniapp 的源码UpLoadFile.vuedeleteOssFile.jshttp.js SpringBoot3 的源码FileUploadController.javaAliOssUtil.java 最终效果图 uniapp 的源码 UpLoadFile.vue <tem…

AI大模型引领未来智慧科研暨ChatGPT自然科学高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

机器学习实训 Day1

线性回归练习 Day1 手搓线性回归 随机初始数据 import numpy as np x np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74]) y np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])from matplotlib import pyplot as plt # 内嵌显示 %matplotlib inlineplt.scatter…

设计模式——责任链模式13

责任链模式 每个流程或事物处理 像一个链表结构处理。场景由 多层部门审批&#xff0c;问题分级处理等。下面体现的是 不同难度的问题由不同人进行解决。 设计模式&#xff0c;一定要敲代码理解 传递问题实体 /*** author ggbond* date 2024年04月10日 07:48*/ public class…

数据结构-----链表

目录 1.顺序表经典算法 &#xff08;1&#xff09;移除元素 &#xff08;2&#xff09;合并数组 2.链表的创建 &#xff08;1&#xff09;准备工作 &#xff08;2&#xff09;建结构体 &#xff08;3&#xff09;链表打印 &#xff08;4&#xff09;尾插数据 &#xff…

【unity】【C#】UGUI组件

文章目录 UI是什么对UI初步认识 UI是什么 UI是用户界面&#xff08;User Interface&#xff09;的缩写&#xff0c;它是用户与软件或系统进行交互的界面。UI设计旨在提供用户友好的界面&#xff0c;使用户能够轻松地使用软件或系统。UI设计包括界面的布局、颜色、字体、图标等…

Github Benefits 学生认证/学生包 新版申请指南

本教程适用于2024年之后的Github学生认证申请&#xff0c;因为现在的认证流程改变了很多&#xff0c;所以重新进行了总结这方面的指南。 目录 验证教育邮箱修改个人资料制作认证文件图片转换Base64提交验证 验证教育邮箱 进入Email settings&#xff0c;找到Add email address…

Java集合List

List特有方法 经典多态写法 // 经典的多态写法 List<String> list new ArrayList<>();常用API&#xff1a;增删改查 // 添加元素 list.add("Java"); // 添加元素到指定位置 list.add(0, "Python");// 获取元素 String s list.get(0);// 修改…

Docker容器嵌入式开发:在Ubuntu上配置Postman和flatpak

在 Ubuntu 上配置 Postman 可以通过 Snap 命令完成&#xff0c;以下是所有命令的总结&#xff1a; sudo snap install postmansudo snap install flatpak在 Ubuntu 上配置 Postman 和 Flatpak 非常简单。以下是一些简单的步骤&#xff1a; 配置 Flatpak 安装 Flatpak&#x…

【Linux】环境下OpenSSH升级到 OpenSSH_9.6P1(图文教程)

漏洞描述 OpenSSH&#xff08;OpenBSD Secure Shell&#xff09;是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现&#xff0c;支持对所有的传输进行加密&#xff0c;可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 9.6之前…

Qt5 编译 Qt Creator 源码中的 linguist 模块

文章目录 下载 Qt Creator 源码手动翻译多语言自动翻译多语言 下载 Qt Creator 源码 Github: https://github.com/qt/qttools 笔记打算用 Qt 5.12.12 来编译 qt creator-linguist 所以笔者下载的是 tag - 5.12.12 &#xff0c;解压后如下&#xff0c;先删除多余的文件&#xf…

vue + element plus:ResizeObserver loop completed with undelivered notifications

ResizeObserver loop completed with undelivered notifications. 解释&#xff1a; 这个错误通常表示ResizeObserver无法在一个浏览器帧中传递所有的通知&#xff0c;因为它们需要的处理时间比帧的剩余时间更长。这通常发生在被观察元素的尺寸变化导致了一连串的回调函数被调…

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义&#xff0c;注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码&#xff1a; #include "reg52.h" #include "ds1302.h"unsigned char Write_…

深度解析SPARK的基本概念

关联阅读博客文章&#xff1a; 深入理解MapReduce&#xff1a;从Map到Reduce的工作原理解析 引言&#xff1a; 在当今大数据时代&#xff0c;数据处理和分析成为了企业发展的重要驱动力。Apache Spark作为一个快速、通用的大数据处理引擎&#xff0c;受到了广泛的关注和应用。…

使用QT 开发不规则窗体

使用QT 开发不规则窗体 不规则窗体贴图法的不规则窗体创建UI模板创建一个父类创建业务窗体main函数直接调用user_dialog创建QSS文件 完整的QT工程 不规则窗体 QT中开发不规则窗体有两种方法&#xff1a;&#xff08;1&#xff09;第一种方法&#xff0c;使用QWidget::setMask函…

缓存相关知识总结

一、缓存的作用和分类 缓存可以减少数据库的访问压力&#xff0c;提升整个网站的数据访问速度&#xff0c;改善数据库的写入性能。缓存可以分为两种&#xff1a; 缓存在应用服务器上的本地缓存&#xff1a;访问速度快&#xff0c;但受应用服务器内存限制 缓存在专门的分布式缓存…

【网络安全技术】——网络安全设备(学习笔记)

&#x1f4d6; 前言&#xff1a;网络防火墙&#xff08;简称为“防火墙”&#xff09;是计算机网络安全管理中应用最早和技术发展最快的安全产品之一。随着互联应用的迅猛发展&#xff0c;各种安全问题和安全隐患日渐突出。防火墙及相关安全技术能够最大可能地解决各类安全问题…

官网下载IDE插件并导入IDE

官网下载IDEA插件并导入IDEA 1. 下载插件2. 导入插件 1. 下载插件 地址&#xff1a;https://plugins.jetbrains.com/plugin/21068-codearts-snap/versions 说明&#xff1a;本次演示以IDEA软件为例 操作&#xff1a; 等待下载完成 2. 导入插件 点击File->setting->Pl…