做爲一個有質量保障的應用程序,固然少不了單元測試;Swift開發的App也亦如此,此文將以一個簡單的實例來介紹Swift中的單元測試。api
這裏咱們使用XCode模版自帶的XCTest框架,此框架包含了一個名爲XCTestCase的類,全部的測試類都應該繼承自它;按照約定俗成全部的測試方法名都應以test開頭,並不能包含任何參數,只有這樣,這些測試方法才能在運行測試時被自動執行;在每一個測試方法裏面,咱們能夠經過調用XCTAssert*函數去斷言一個操做成功與否,如判等函數XCTAssertEqual、大於函數XCTAssertGreaterThan等;框架
話很少說,請先使用XCode建立一個iOS的Single View Application項目,並選擇Swift做爲開發語言。ide
你們能夠看到建立完成後的目錄結構應該是如此(這裏個人項目名爲TestDemo):函數
默認的模版會建立兩個文件夾,一個和項目名同名(這裏是TestDemo),用於放置App的主程序;另一個則是「項目名+Tests」(這裏是TestDemoTests),用於放置測試代碼;單元測試
這裏要注意的是,你要測試的類須要在Test中使用到,因此你在建立類文件時須要在Targets中同時選擇TestDemo和TestDemoTests;測試
如我在主應用程序中添加一個名爲Url的類:url
建立完成後,錄入代碼:spa
1 class Url { 2 let baseUrl: String 3 4 init(baseUrl: String) { 5 self.baseUrl = baseUrl 6 } 7 8 func getActualPathFrom(resourcePath: String, segments: [String:String]) -> String { 9 var actualPath = resourcePath 10 for (key,value) in segments { 11 var segmentPlaceHolder = "{\(key)}" 12 actualPath = actualPath.stringByReplacingOccurrencesOfString(segmentPlaceHolder, withString: value, options: .LiteralSearch, range: nil) 13 } 14 return baseUrl + actualPath 15 } 16 }
而後在TestDemoTests文件夾下建立UrlTests文件,此時因爲該類只須要在測試中才能用到,因此只須要在Targets選擇TestDemoTests就能夠了:code
建立完成後,導入XCTest框架,並使該類繼承自XCTestCase,而後錄入測試代碼:blog
import XCTest class UrlTests: XCTestCase { var urlInstance = Url(baseUrl: "http://localhost:8080/api/") func testShouldGetCorrectPathWhenNoSegmentProvided() { let resourcePath = "customers" let result = urlInstance.getActualPathFrom(resourcePath, segments: [String:String]()) XCTAssertEqual(result, "http://localhost:8080/api/customers", "Can not get corrent path when no segments provided") } func testGetCorrectPathGivenOneSegment() { let resourcePath = "customer/{id}" let result = urlInstance.getActualPathFrom(resourcePath, segments: ["id": "10"]); XCTAssertEqual(result, "http://localhost:8080/api/customer/10", "Can not get corrent path when only one segment provided") } }