Xcode 单元测试
添加单元测试
新建项目时添加

在已有项目中添加
File->New->Target...

效果

基本流程
单元测试的类继承自:XCTestCase
测试方法以test开头
override func setUp() {
////每次测试前调用,可以在测试之前创建在test case方法中需要用到的一些对象等
super.setUp()
}
override func tearDown() {
//每次测试结束时调用tearDown方法
super.tearDown()
}
func testExample() {
//具体的测试逻辑
}
基本测试流程:
- 定义变量和预期
- 执行方法得到实际值
- 断言
常用断言表达式
//通用断言
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的断言
基本的测试
func testExample() {
let a : Int32! = 5
let b : Int32! = 10
let expected: Int32! = 16;
let c:Int32! = self.add(a: a, b: b)
XCTAssertEqual(c, expected, "add方法错误");
}
异步测试
func testAsyn() {
let exp : XCTestExpectation = self.expectation(description: "出错啦")
let queue: OperationQueue = OperationQueue.init()
queue.addOperation {
sleep(2)
XCTAssertLessThanOrEqual("1", "1")
exp.fulfill()
}
self .waitForExpectations(timeout: 3, handler: { (error: Error?) in
if error != nil {
print("超时:\(error.debugDescription)")
}
})
}
性能测试
func testPerformanceExample() {
//性能测试方法,通过测试block中方法执行的时间,比对设定的标准值和偏差觉得是否可以通过测试
self.measure {
var i: Int64 = 1
var r: Int64 = 1
while i < 100000000 {
r += i
i+=1
}
print("r=\(r)")
}
}
查看结果&调整期望
演示
代码覆盖率
配置选项:
Product->schemes->edit scheme

代码覆盖是基于文件查看的:新建一个CodeCoverage.swift 提供一个checkName方法。
测试代码:
func testCodeCoverage() {
CodeCoverage.checkName(name: "riverli")
}
查看结果:

基本UI测试
交流群
移动开发交流群:264706196
网友评论