当前位置: 首页 > news >正文

网站备案网站建设方案书/西安网络科技公司排名

网站备案网站建设方案书,西安网络科技公司排名,我做微信淘宝客网站有哪些,为什么有网网站打不开怎么回事啊文章目录 使用QuickNimble1、苹果官方测试框架XCTest的优缺点2、选择QuickNimble的原因:3、QuickNimble使用介绍集成:Quick关键字说明:Nimble中的匹配函数等值判断:使用equal函数是否是同一个对象:使用beIdenticalTo函…

文章目录

    • 使用Quick+Nimble
      • 1、苹果官方测试框架XCTest的优缺点
      • 2、选择Quick+Nimble的原因:
      • 3、Quick+Nimble使用介绍
        • 集成:
        • Quick关键字说明:
        • Nimble中的匹配函数
          • 等值判断:使用equal函数
          • 是否是同一个对象:使用beIdenticalTo函数
          • 比较:
          • 比较浮点数
          • 类型检查
          • 是否为真
          • 是否有异常
          • 集合关系
          • 字符串
          • 检查集合中的所有元素是否符合条件
          • 检查集合个数
          • 匹配任意一种检查
      • 4、Quick使用总结

使用Quick+Nimble

github地址

1、苹果官方测试框架XCTest的优缺点

优点:与 Xcode 深度集成,有专门的Test 导航栏。

缺点:
1)因为受限于官方测试API,因此功能不是很丰富。
2)在书写性和可读性上都不太好。在测试用例太多的时候,由于各个测试方法是割裂的,想在某个很长的测试文件中找到特定的某个测试并搞明白这个测试是在做什么并不是很容易的事情。
3)所有的测试都是由断言完成的,而很多时候断言的意义并不是特别的明确,对于项目交付或者新的开发人员加入时,往往要花上很大成本来进行理解或者转换。另外,每一个测试的描述都被写在断言之后,夹杂在代码之中,难以寻找。
4)使用XCTest测试另外一个问题是难以进行mock或者stub

2、选择Quick+Nimble的原因:

主要是由于苹果官方框架的测试方法及断言不明确,可读性不好,难以分辨,交接项目需要花费的时间很多,所以建议采用三方测试框架
目前主流的三方测试框架主要有:
oc中:kiwi 、specta、cedar
swift:quick+nimble、Sleipnir
由于项目是使用的swift语言,所以主要采用quick+nimble,用于单元测试和断言。
如果你的项目是OC的,推荐使用kiwi,目前是start最多的三方框架。

3、Quick+Nimble使用介绍

Quick 是一个建立在XCTest 上,为Swift 和Objective-C 设计的测试框架. 对测试使用Swift编写的App非常友好,对Swift使用者来说,Quick是最佳选择
它通过DSL 去编写非常类似于RSpec 的测试用例。
Nimble 就像是Quick 的搭档,它提供了匹配器作为断言,用于编写匹配模式。

集成:

使用pod集成方便快捷:

pod ‘Quick’
pod ‘Nimble’

新建一个测试类,继承于QuickSpec父类,然后重写spec( )方法
示例代码:

finalfinal class BindDeviceTests: QuickSpec {override func spec() {//所有测试放在这里describe("test BindDeviceDB") {let findMac = "34:94:54:C2:E3:C6"let bindedMacs = ["34:94:54:C2:E3:C6","D8:0B:CB:62:08:5F","FF:F2:00:08:21:9C"]it("test saveBindDevice") {let bindDevice = BindDevice()bindDevice.scaleName = "test"bindDevice.userId = testLoginUserIdbindDevice.mac = testMacexpect(bindDevice.save()).to(beTrue())}it("test findBindDeviceList") {let list = BindDevice.findBindDeviceList()printLog(message: "test findBindDeviceWithMac: \(String(describing: list?.count))")expect(list?.count) == 6}......xit("test findNotUploadBindDevices") {let list = BindDevice.findNotUploadBindDevices()printLog(message: "test findNotUploadBindDevices: \(String(describing: list?.count))")expect(list).to(beNil())}}}}
Quick关键字说明:

在这里插入图片描述

Nimble中的匹配函数
等值判断:使用equal函数
  • expect(actual).to(equal(expected))
  • expect(actual) == expected
  • expect(actual) != expected
是否是同一个对象:使用beIdenticalTo函数
  • expect(actual).to(beIdenticalTo(expected))
  • expect(actual) === expected
  • expect(actual) !== expected
比较:
  • expect(actual).to(beLessThan(expected))
  • expect(actual) < expected
  • expect(actual).to(beLessThanOrEqualTo(expected))
  • expect(actual) <= expected
  • expect(actual).to(beGreaterThan(expected))
  • expect(actual) > expected
  • expect(actual).to(beGreaterThanOrEqualTo(expected))
  • expect(actual) >= expected
比较浮点数
  • expect(10.01).to(beCloseTo(10, within: 0.1))
类型检查
  • expect(instance).to(beAnInstanceOf(aClass))
  • expect(instance).to(beAKindOf(aClass))
是否为真
  • expect(actual).to(beTruthy())
  • expect(actual).to(beTrue())
  • expect(actual).to(beFalsy())
  • expect(actual).to(beFalse())
  • expect(actual).to(beNil())
是否有异常
  • // Passes if actual, when evaluated, raises an exception:
  • expect(actual).to(raiseException())
  • // Passes if actual raises an exception with the given name:
  • expect(actual).to(raiseException(named: name))
  • // Passes if actual raises an exception with the given name and reason:
  • expect(actual).to(raiseException(named: name, reason: reason))
  • // Passes if actual raises an exception and it passes expectations in the block
  • // (in this case, if name begins with ‘a r’)
  • expect { exception.raise() }.to(raiseException { (exception: NSException) in
    • expect(exception.name).to(beginWith(“a r”))
  • })
集合关系
  • // Passes if all of the expected values are members of actual:
  • expect(actual).to(contain(expected…))
  • expect([“whale”, “dolphin”, “starfish”]).to(contain(“dolphin”, “starfish”))
  • // Passes if actual is an empty collection (it contains no elements):
  • expect(actual).to(beEmpty())
字符串
  • // Passes if actual contains substring expected:
  • expect(actual).to(contain(expected))
  • // Passes if actual begins with substring:
  • expect(actual).to(beginWith(expected))
  • // Passes if actual ends with substring:
  • expect(actual).to(endWith(expected))
  • // Passes if actual is an empty string, “”:
  • expect(actual).to(beEmpty())
  • // Passes if actual matches the regular expression defined in expected:
  • expect(actual).to(match(expected))
检查集合中的所有元素是否符合条件
  • // with a custom function:
  • expect([1,2,3,4]).to(allPass({$0 < 5}))
  • // with another matcher:
  • expect([1,2,3,4]).to(allPass(beLessThan(5)))
检查集合个数
  • expect(actual).to(haveCount(expected))
匹配任意一种检查
  • // passes if actual is either less than 10 or greater than 20
  • expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20)))
  • // can include any number of matchers – the following will pass
  • expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7)))
  • // in Swift you also have the option to use the || operator to achieve a similar function
  • expect(82).to(beLessThan(50) || beGreaterThan(80))

4、Quick使用总结

  • 使用Quick,编写it方法执行多个test方法,实际执行顺序,按照字母排序执行,可以从控制台打印得出
  • 单元测试的方法,保存、删除、修改等会对数据库真正意义上的修改
  • 使用xit,表示不测试这些方法
  • 当既有it又有fit,表示只会测试fit的方法( 只要存在f开头的方法,单元测试开始执行便只会执行f开头的方法,即使不在同一个测试类中
  • 当使用describe、context、it嵌套使用时,当最外层方法使用了x开头的,整个入口都不会进入测试,即使嵌套里面使用了f开头的

相关文章:

Swift单元测试Quick+Nimble

文章目录 使用QuickNimble1、苹果官方测试框架XCTest的优缺点2、选择QuickNimble的原因&#xff1a;3、QuickNimble使用介绍集成&#xff1a;Quick关键字说明&#xff1a;Nimble中的匹配函数等值判断&#xff1a;使用equal函数是否是同一个对象&#xff1a;使用beIdenticalTo函…...

详解电源动态响应的测试方法及重要性 -纳米软件

电源动态响应测试的重要性 电源动态响应测试是为了检测电源系统在负载变化、输入电压变化情况下的性能表现&#xff0c;包括响应速度、稳定性以及恢复能力等&#xff0c;从而判断电源能否快速、准确地恢复到正常工作状态&#xff0c;为电源的优化设计提供依据。 动态响应能力影…...

计算机网络系统结构-2020期末考试解析

【前言】 不知道为什么计算机网络一门课这么多兄弟&#xff0c;这份看着也像我们的学科&#xff0c;所以也做了。 一&#xff0e; 单选题&#xff08;每题 2 分&#xff0c;共 20 题&#xff0c;合计 40 分&#xff09; 1 、当数据由主机 A 发送到主机 B &#xff0c;不参…...

二叉树的遍历 Java

二叉树的遍历 递归法前序遍历中序遍历后序遍历改进 迭代法前序、后序遍历中序遍历 Java 中 null、NULL、nullptr 区别 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, Tree…...

数据结构之str类

str类 str 是字符串类。str 大概是 Python 中除了int 之外最基本、最常用的数据类型&#xff0c;在Java与其他语言里基本叫做String&#xff0c;其用途广泛&#xff0c;随处可见&#xff0c;但是要记住一点&#xff0c;字符串是不允许修改的。不过&#xff0c;我们仍然可以对其…...

Java电影购票小程序在线选座订票电影

Java电影购票小程序 功能&#xff1a;注册用户可已查看电影场次评价选座订票退票&#xff0c;影院管理员可以排片退款在线卖票和管理演播室等。超级管理员可管理电影排片电影院用户管理等。 演示视频 小程序&#xff1a; https://www.bilibili.com/video/BV11W4y1A7mK/?shar…...

24-1-9 bilibilic++音视频

下午两点面试&#xff0c;面试官迟到了一会&#xff0c;面试官人很好&#xff0c;整体面试经历很不错&#xff0c;但是我人太紧张了&#xff0c;基础知识掌握的深度不够&#xff0c;没有深挖&#xff0c; 是做音视频的底层相关的&#xff0c; 实习要求只要每天打卡够九个小时就…...

备案(三)

首次备案需要多少天 备案初审&#xff1a;您提交初审后&#xff0c;天翼云会在一个工作日内进行审核&#xff0c;并通过短信和邮件形式通知审核结果。 管局审核&#xff1a;各地通管局审核时间不同&#xff0c;一般为1到20个工作日&#xff0c;审核结果将以短信和邮件形式通知…...

Hotspot源码解析-第十九章-ClassLoaderData、符号表、字符串表的初始化

第十九章-ClassLoaderData初始化 讲解本章先从一张图开始 众所周知&#xff0c;Java类的相关信息都是存储在元空间中的&#xff0c;但是是怎么存储的&#xff0c;相信很多读者是不清楚的&#xff0c;这里就不得不涉及到ClassLoaderDataGraph、classLoader、classLoaderData&…...

impala元数据自动刷新

一.操作步骤 进入CM界面 > Hive > 配置 > 搜索 启用数据库中的存储通知(英文界面搜索&#xff1a;Enable Stored Notifications in Database)&#xff0c;并且勾选&#xff0c;注意一定要勾选&#xff0c;配置后面的配置不生效。数据库通知的保留时间默认为2天&#…...

骑砍战团MOD开发(35)-射击精度系统

一.射击精度 和CF等FPS射击类游戏一样,为了模拟实际射击过程中弓箭,子弹等投掷物的射击偏移,故设计精度系统控制不同武器不同兵种的使用武器能力,统称为游戏精度系统. 由于骑砍可以在马上进行射击,故引擎内部也内置了骑射技能点以便控制玩家在骑马过程中射击的能力. 武器精度:通…...

树莓派非常实用的程序-3 vcdbg

vcdbg 是一个应用程序&#xff0c;用于帮助从在ARM上运行的Linux调试VideoCore GPU。它需要以根用户身份运行。此应用程序主要用于Raspberry Pi工程师&#xff0c;尽管有一些命令一般用户可能会发现有用。 sudo vcdbg help 将给出可用命令的列表。 NOTE 仅列出了最终用户使用…...

jmeter分布式服务搭建

目录 一、环境准备 二、 安装包下载 三 、安装jdk 四 、控制机安装 4.1 解压压缩包 4.2 修改 bin/jmeter.properties 4.3 修改 bin/system.properties 五、执行机安装 5.1 解压安装包 5.2 修改 bin/jmeter.properties 5.3 修改 bin/system.properties 5.4 启动执行机 …...

vue中el-radio无法默认选中

页面上不生效&#xff0c;默认什么都不选中 <el-radio-group v-model"queryParams.videoUrlType"><el-radio :label"1">本地上传</el-radio><el-radio :label"2">外部链接</el-radio> </el-radio-group>da…...

分布式I/O应用于智慧停车场的方案介绍

客户案例背景 目前车位检测技术有磁电技术、超声波技术、红外线技术、图像识别车位技术。考虑到例如电磁干扰、信号干扰等的环境因素影响&#xff0c;通常会采用组合使用的方式进行&#xff0c;如采用不同的传感器、应用不同的协议等&#xff0c;以便提高车位检测的准确性和实时…...

node后端+vue前端实现接口请求时携带authorization验证

node后端vue前端实现接口请求时携带authorization验证 我们在写web项目时&#xff0c;后端写好接口&#xff0c;前端想要调用后端接口时&#xff0c;除了登录注册页面&#xff0c;所有的请求都需要携带authorization&#xff0c;这样是为了避免随意通过接口调取数据的现象发生…...

SourceTree管理git

SourceTree管理git...

【数模百科】一篇文章讲清楚灰色预测模型GM(1,1)附python代码

本篇文章摘录自GM(1,1) - 数模百科 &#xff0c;如果想了解更多有关灰色预测模型的信息&#xff0c;请移步 灰色预测模型 - 数模百科 首先&#xff0c;“灰色”这个词在这里不是指颜色&#xff0c;而是形容一种信息状态&#xff0c;介于黑&#xff08;信息全无&#xff09;和白…...

openssl3.2 - 官方demo学习 - mac - hmac-sha512.c

文章目录 openssl3.2 - 官方demo学习 - mac - hmac-sha512.c概述笔记END openssl3.2 - 官方demo学习 - mac - hmac-sha512.c 概述 MAC算法为HMAC, 设置参数(摘要算法为SHA3-512), 用key初始化, 对明文做MAC数据. 笔记 /*! \file hmac-sha512.c \note openssl3.2 - 官方demo…...

pycharm的使用技巧

1.新建文件时,自动生成代码 settings->editor->file and code templates,选择python script ${NAME} 文件名 ${DATE} 日期 2.自动补齐自定义段落 settings->editor->live templates,在右侧点击+号,添加自定义的内容 完成之后,在下方勾选python 3.修改注释的…...

如何通过内网穿透实现公网访问Portainer管理监控Docker容器

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风…...

Redis原理篇(Dict的收缩扩容机制和渐进式rehash)

Dict&#xff08;即字典&#xff09; Redis是一种键值型数据库&#xff0c;其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成&#xff1a;哈希表&#xff08;DictHashTable&#xff09;&#xff0c;哈希节点(DictEntry)&#xff0c;字典&#xff08;Dict&#xff09…...

Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件

Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具&#xff0c;它可以帮助用户通过网络连接到其他计算机&#xff0c;实现远程控制和操作。 软件下载&#xff1a;Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议&#xff0c;包括 …...

解读Vue的原型及原型链

在 JavaScript 中&#xff0c;每个对象都有一个关联的原型&#xff08;prototype&#xff09;。原型是一个对象&#xff0c;其他对象可以通过原型实现属性和方法的继承。原型链是一种由对象组成的链式结构&#xff0c;它通过原型的引用连接了一系列对象&#xff0c;形成了一种继…...

拓扑排序(优先队列)queue、C++

N个小朋友&#xff0c;编号 1∼N&#xff0c;要排成一队。在安排每个人的顺序时&#xff0c;有 M 个要求&#xff0c;每个要求包含两个整数 a,b&#xff0c;表示小朋友 a 要排在小朋友 b 的前面。 请你找出符合所有要求的排队顺序。 输入格式 第一行包含整数 N,M。接下来 M 行…...

【Spring】SpringBoot 统一功能处理

文章目录 前言1. 拦截器1.1 什么是拦截器1.2 拦截器的使用1.2.1 自定义拦截器1.2.2 注册配置拦截器 1.3 拦截器详解1.3.1 拦截路径1.3.2 拦截器执行流程1.3.3 适配器模式 2. 统一数据返回格式3. 统一异常处理 前言 在日常使用 Spring 框架进行开发的时候&#xff0c;对于一些板…...

拦截器HandlerInterceptor | springmvc系列

拦截器&#xff0c;通俗来来将&#xff0c;就是我们将访问某个路径的请求给拦截下来&#xff0c;然后可以对这个请求做一些操作 基本使用 创建拦截器类 让类实现HandlerInterceptor接口&#xff0c;重写接口中的三个方法。 Component //定义拦截器类&#xff0c;实现Handle…...

【SQL server】DML触发器监控数据库字段值改变

文章目录 前言DML触发器基本思路创建触发器固定字段触发示例完整示例代码变量声明查询新旧值插入数据到日志表效果视频动态字段触发示例完整代码示例触发器基本信息变量声明定义游标打开游标临时表创建循环处理字段...

Docker容器(二)安装与初体验wordpress

一、安装 1.1关闭SeLinux SeLinux&#xff08;Security-Enhanced Linux&#xff09;是一种基于Linux内核的安全模块&#xff0c;旨在提供更严格的访问控制和安全策略。它通过强制实施安全策略来限制系统资源的访问&#xff0c;从而保护系统免受恶意软件和未经授权的访问。 在…...

Odrive 学习系列二:将烧录工具从ST-Link V2修改为JLink

一、背景: 通过观察odrive解压后的内容,可以看到在下面配置文件及makefile文件中的配置设置的均为openOCD + stlink v2,例如makefile中: # This is only a stub for various commands. # Tup is used for the actual compilation.BUILD_DIR = build FIRMWARE = $(BUILD_DI…...