標籤:
作為一個有品質保障的應用程式,當然少不了單元測試;Swift開發的App也亦如此,此文將以一個簡單的執行個體來介紹Swift中的單元測試。
這裡我們使用XCode模版內建的XCTest架構,此架構套件含了一個名為XCTestCase的類,所有的測試類別都應該繼承自它;按照約定俗成所有的測試方法名都應以test開頭,並不能包含任何參數,只有這樣,這些測試方法才能在運行測試時被自動執行;在每個測試方法裡面,我們可以通過調用XCTAssert*函數去斷言一個操作成功與否,如判等函數XCTAssertEqual、大於函數XCTAssertGreaterThan等;
話不多說,請先使用XCode建立一個iOS的Single View Application項目,並選擇Swift作為開發語言。
大家可以看到建立完成後的目錄結構應該是如此(這裡我的項目名為TestDemo):
預設的模版會建立兩個檔案夾,一個和項目名同名(這裡是TestDemo),用於放置App的主程式;另外一個則是“項目名+Tests”(這裡是TestDemoTests),用於放置測試代碼;
這裡要注意的是,你要測試的類需要在Test中使用到,所以你在建立類檔案時需要在Targets中同時選擇TestDemo和TestDemoTests;
如我在主應用程式中添加一個名為Url的類:
建立完成後,錄入代碼:
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 = resourcePath10 for (key,value) in segments {11 var segmentPlaceHolder = "{\(key)}"12 actualPath = actualPath.stringByReplacingOccurrencesOfString(segmentPlaceHolder, withString: value, options: .LiteralSearch, range: nil)13 }14 return baseUrl + actualPath15 }16 }
然後在TestDemoTests檔案夾下建立UrlTests檔案,此時由於該類只需要在測試中才能用到,所以只需要在Targets選擇TestDemoTests就可以了:
建立完成後,匯入XCTest架構,即可錄入測試代碼了:
import XCTestclass 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") }}
最後Command+U執行測試
用Swift語言做App開發之單元測試