用Swift語言做App開發之單元測試


作為一個有質量保障的應用程序,當然少不了單元測試;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 = 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就可以了:

創建完成后,導入XCTest框架,並使該類繼承自XCTestCase,然后錄入測試代碼:

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")
    }
}

最后Command+U執行測試 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM