测试开发—XCTest-iOS单元测试框架

本文介绍了iOS的单元测试框架XCTest及其子框架XCUITest。XCTest提供了XCTestCase和XCTestSuite进行测试,XCUITest则专注于UI测试。文章详细讲解了XCTest的主要类,包括XCTest、XCTestCase、XCUITest和XCUICoordinate,并给出了相关属性和方法的示例,帮助理解如何在iOS应用中进行测试。

XCTest    是iOS的单元测试框架,有objective-c和swift两种语言可以选择

XCUITest  是iOS的UI测试框架

XCTest 官方文档地址:Apple Developer Documentation

XCTest 框架类似于python中的unit test框架,声明一个测试case继承XCTestCase和测试方法,测试方法以test开头,然后执行。

相关类介绍:

Class XCTest

XCTest类提供XCTestCase和XCTestSuite用于创建、管理和执行测试的共享功能。在大多数情况下,在项目中定义测试时,应该直接子类化XCTestCase。

包含了以下属性:

  1. name:   test 的 name
  2. testCaseCount: case个数
  3. testRun: XCTestRun对象来执行test
  4. testRunClass: 运行测试时实例化的XCTestRun子类,以保存测试结果。

包含了以下方法:

  1. perform( XCTestRun ):  执行一个特定的测试
  2. run():创建testRunClass指定的类的实例,并将其作为参数传递给执行perform(_:)方法。

还包含了一系列的断言方法

Class XCTestCase

具体的属性和方法看文档,主要包含代码块性能检测,异步测试(例如打开文档,其它线程工作,网络活动等等)

然后我们看下iOS比较特殊的XCUITest

Class XCUITest

Xcuitest 的话有三大类

XCUIApplication: 实现了application的launch,active, terminal, state等功能

XCUIElement:定义了元素的操作事件

XCUIElementQuery: 元素查询定位相关

XCUIApplication类继承自XCUIElement类,XCUIElement类遵循XCUIElementAttributes和XCUIElementTypeQueryProvider协议,而XCUIElementTypeQueryProvider协议返回的UI元素对象则是XCUIElementQuery类。

XCUIApplication

有三种创建application的方法

  1. init()会创建当前test的target application 代理,这个是在Xcode中设置的
  2. init(bundleIdentifier)创建指定bundle ID的application 代理
  3. init(url) 根据URL指定资源创建代理

几个常用的方法:

  1. launch( )      启动app
  2. activate() 激活app(如果app进入后台,可以用这个方法激活启动到前台)
  3. terminate() 终止所有app

XCUIApplication.State

判断当前app的运行状态

  1. unknown  未知状态
  2. notRuning  未运行
  3. runningBackgroundSubspended 后台运行但被挂起
  4. runningBackground 后台运行
  5. runningForeground  正在前台运行

XCUIElement 

XCUIElementQuery

Xcuielement 是所有app元素的类,重点记录下如何使用XCUIElementQuery来定位元素

创建查询

func descendants(matching type: XCUIElement.ElementType) -> XCUIElementQuery

返回所有符合元素类型的结果

func containing(_ predicate: NSPredicate) -> XCUIElementQuery

返回包含匹配特定描述的元素

func matching(identifier: String) -> XCUIElementQuery

 返回匹配identifier的所有元素

func matching(NSPredicate) -> XCUIElementQuery

传入NSPredicate作为过滤器返回一个新查询,该查询匹配与所提供描述直接匹配的所有元素。

获取匹配元素

var allElementsBoundByIndex: [XCUIElement] { get }

查询返回对应索引的元素数组

var count: Int { get }

查询匹配到的元素个数

var element: XCUIElement { get }

查询的单个匹配元素

func element(boundBy index: Int) -> XCUIElement

将索引用于查询结果的元素,以确定要使用哪个基础可访问性元素。

func element(matching predicate: NSPredicate) -> XCUIElement

返回与之匹配的元素

这里要介绍下Class NSPredicate

一种逻辑条件的定义,用于约束检索或内存筛选。

init(format predicateFormat: String,

argumentArray arguments: [Any]?)

通过将给定数组中的值替换为格式字符串并解析结果来初始化匹配器。

例如:

//创建匹配器,匹配placeholderValue的值为Type in number的控件

let predicate = NSPredicate(format: "placeholderValue == %@", "Type in number")

Class XCUICoordinate

屏幕上相对于某个UI元素的位置。

可以通过xcuielement的

func coordinate(withNormalizedOffset normalizedOffset: CGVector) -> XCUICoordinate

来生成一个UI位置

这个点生成的参数CGVector是生成位置的x,y除以当前element的中心点的x,y坐标 

在官方文档中还有许多类,但基本基于上述的一些父类实现不同的方法,这个需要根据测试的需要来使用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值