iOS测试
来源:互联网 发布:淘宝商城休闲女鞋 编辑:程序博客网 时间:2024/05/21 17:53
iOS测试
UNIT TESTS VS UI TESTS
- Unit tests — test small, units of code
- UI Tests — test user interface
Unit Test
测试类是XCTestCase的子类,包含多个测试方法,测试方法必须以test
开头
setup()
方法每次测试前调用,可以在测试之前创建在test case方法中需要用到的一些对象等 tearDown()
方法每次测试结束时调用tearDown
方法
@testable import XXXX
引入主工程时加上@testable
关键字作为前缀,现在即可在测试类中引入任何主工程中的internal
类了,参考Swift 2 中的单元测试关键字 @testable
方法调用的过程是:setup()
->测试方法->tearDown()
,如果还有另外的测试方法,就再循环调动,即setup()
和tearDown()
对每个测试方法都要调用
怎么写有用的测试方法呢?
1.测试有fail的可能性
2.测试有pass的可能性
3.代码要重构,并保持简洁
测试之前,先添加一个target
,如下选择UnitTest
自己创建测试类时,选择Unit Test Case Class
断言
参考iOS单元测试
大部分的测试方法使用断言决定的测试结果。所有断言都有一个类似的形式:比较,表达式为真假,强行失败等
//通用断言XCTAssert(expression, format...)//常用断言:XCTAssertTrue(expression, format...)XCTAssertFalse(expression, format...)XCTAssertEqual(expression1, expression2, format...)XCTAssertNotEqual(expression1, expression2, format...)XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)XCTAssertNil(expression, format...)XCTAssertNotNil(expression, format...)XCTFail(format...) //直接Fail的断言
运行测试 Command+U
运行测试
每个单元测试可被分为3个基本的section: given, when, then
- Given is the initial state or setup before the test can be performed测试之前的初始化状态或设置
- When is the action or behavior that’s being tested被测试的动作或行为
- Then is verification that the expected behavior occurred or value was returned确认预期的行为或返回的值
如:
func testFirstPancakeHouseHasExpectedValues() { // given collection = PancakeHouseCollection() // when let bundle = Bundle(for: PancakeHouseCollectionTests.self) collection.loadPancakeHouses("test_pancake_houses", in: bundle) // then let pancakeHouse = collection[0] XCTAssertEqual(pancakeHouse.name, "name 1") XCTAssertEqual(pancakeHouse.details, "details 1") XCTAssertEqual(pancakeHouse.photo, UIImage(named: "pancake\(plistIndex)"))}
Expectation
上面的测试代码都是从上到下依次执行,但如果有异步调用,该怎么办呢?
就要使用Expectation,然后等待Expectation被fufilled,可设置最大等待的时间,如果在最大等待的时间里没有被fulfilled,test就被标记为失败了。
Mock测试
参考:
- iOS中的测试:OCMock
什么是mock测试?
对于一些不容易构造或不容易获取的对象,此时你可以创建一个虚拟的对象(mock object)来完成测试。
Performance Test
性能测试主要使用 measureBlock
方法 ,用于测试一组方法的执行时间,通过设置baseline
(基准)和stddev
(标准偏差)来判断方法是否能通过性能测试。
func testMeasuerLoadDefaultPancakeHouses() { measure { self.collection.loadDefaultPancakeHouses() } }
Enable Code Coverage
Code Coverage可用来测量有多少代码执行了测试
UI Test
Proxy类
XCUIDevice
-表示的device,可用来设置device的方向,或者模拟如按音量键的行为 XCUIApplication
-表示app,至少要创建一个这个类的实例,用来加载app并测试,XCUIApplication
其实是XCUIElement
的一个子类 XCUIElement
-表示所以可测试的单元,如tableview,cell等,也包括一些Action方法:
- type text, tap, swipe up等
一些属性Properties,如下:
- frame, title, enabled, exists等
如下的UI测试:
func testCanNavigateToAboutScreen() { //查找到对应的按钮,并点击 let pancakeHouseButton = app.navigationBars.buttons["Pancake Houses"] pancakeHouseButton.tap() let aboutButton = app.navigationBars.buttons["About"] aboutButton.tap() let aboutTitleText = app.navigationBars.staticTexts["About"] XCTAssertTrue(aboutTitleText.exists, "should be on the about screen") }
XCUIElementQuery
在UI层级中搜素对应的UI元素
Recording UI Test
除了自己写UI Test之外,还有另外一种方式,运行app,和它交互,然后Xcode可以记录所有的action,并把它们转化为代码
TDD
参考TDD的iOS开发初步以及Kiwi使用入门
其它资源
- Testing with Xcode
- iOS单元测试
- IOS测试
- iOS测试
- iOS测试
- iOS测试
- IOS自动化测试压力测试
- ios 远程测试应用程序
- testFlight,ios测试解决方案
- ios UIAutomation 测试
- iOS自动化测试有关
- ios 应用程序远程测试
- ios UIAutomation 测试
- IOS测试网络状态
- IOS 远程测试方案
- IOS App测试总结
- iOS无限后台测试
- iOS 测试驱动开发
- iOS 测试驱动开发
- ios 应用程序测试
- Spring Boot 入门教程
- java.io.EOFException
- 数据应用达人之SQL基础教程分享13-存储过程与事务
- Vue, App与我(二)
- redis最通俗介绍和在window下安装
- iOS测试
- 【Android】- bindService 之 leaked ServiceConnection错误
- C API向MySQL插入批量数据的快速方法——关于mysql_autocommit
- CSS镂空图表原理
- Android 高仿微信头像截取 打造不一样的自定义控件
- YARN源码分析之ApplicationMaster启动流程之NM端
- android studio 开发环境搭建
- Influxdb原理详解
- VS 配置文件恢复默认设置