swift - iOS系統自帶單元測試學習筆記

背景

開發iOS版IM客戶端的過程中,經常需要測試SDK的裏面的業務邏輯,比如協議頭是否正確,需要和服務器通信調試一下。這個時候如果寫一個頁面,通過按鈕點擊的方式調用,顯得比較多餘。所以就想到了swift中如何使用單元測試,特此記錄。

macos:10.15.3
xcode:11.3.1
最近更新時間:2020-03-16

步驟

創建單元測試項目

file->new->Target...
選擇Unit Testing Bundle
單元測試項目名字,直接默認即可
直接默認,finish即可。

創建完成

創建單元測試文件

在新創建的單元測試項目中,右擊。
New File...
選擇Unit Test Case Class
輸入測試的文件名+Tests後,直接下一步下一步即可
單元測試文件名
創建完成

寫測試代碼

首先引入要測試的模塊(項目名):

@testable import CoffeeChat // @testable 可訪問 internal 屬性方法

寫測試方法(類似Main函數入口):

// 格式爲 test+名字,否則無法運行,如下
func testConnect(){
    let client = CIMClient()
    client.connect(ip: "10.0.106.117", port:8000)
    sleep(3)
}

完整代碼如下:

//
//  CIMClientTests.swift
//  CoffchatTests
//
//  Created by xuyingchun on 2020/3/16.
//  Copyright © 2020 Xuyingchun Inc. All rights reserved.
//

import XCTest

@testable import Coffchat

class CIMClientTests: XCTestCase {
    func testConnect(){
        let client = CIMClient()
        client.connect(ip: "10.0.106.117", port:8000)
        
        sleep(3)
    }
}

執行測試

直接點擊要測試函數行號位置的“運行”圖標即可。
示例
當然,也可以通過以下方式:
快捷鍵 command + u
快捷鍵

tips
單元測試可以分模塊來,也可以分小功能來,你開心就好了

這是用到系統自帶的單元測試,網上也有其他的方案

測試結果和列表:
測試單元列表

刪除單元測試項目

  1. 刪除單元測試文件夾,比如"CoffchatTests"
  2. 刪除target,具體如下(如果只刪除文件夾,不刪除target會報錯)
    1. 點擊項目名
    2. 點擊“左側展開”
    3. 在要刪除的target上右擊刪除
      如何刪除單元測試target

備註

單元測試常用方法

XCTAssert(expression, format...)當expression求值爲TRUE時通過

其他方法參考

XCTFail(format…) 生成一個失敗的測試;
XCTAssertNil(a1, format...)爲空判斷,a1爲空時通過,反之不通過;
XCTAssertNotNil(a1, format…)不爲空判斷,a1不爲空時通過,反之不通過;
XCTAssert(expression, format...)當expression求值爲TRUE時通過;
XCTAssertTrue(expression, format...)當expression求值爲TRUE時通過;
XCTAssertFalse(expression, format...)當expression求值爲False時通過;
XCTAssertEqualObjects(a1, a2, format...)判斷相等,[a1 isEqual:a2]值爲TRUE時通過,其中一個不爲空時,不通過;
XCTAssertNotEqualObjects(a1, a2, format...)判斷不等,[a1 isEqual:a2]值爲False時通過;
XCTAssertEqual(a1, a2, format...)判斷相等(當a1和a2是 C語言標量、結構體或聯合體時使用, 判斷的是變量的地址,如果地址相同則返回TRUE,否則返回NO);
XCTAssertNotEqual(a1, a2, format...)判斷不等(當a1和a2是 C語言標量、結構體或聯合體時使用);
XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判斷相等,(double或float類型)提供一個誤差範圍,當在誤差範圍(+/-accuracy)以內相等時通過測試;
XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判斷不等,(double或float類型)提供一個誤差範圍,當在誤差範圍以內不等時通過測試;
XCTAssertThrows(expression, format...)異常測試,當expression發生異常時通過;反之不通過;(很變態) XCTAssertThrowsSpecific(expression, specificException, format...) 異常測試,當expression發生specificException異常時通過;反之發生其他異常或不發生異常均不通過;
XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression發生具體異常、具體異常名稱的異常時通過測試,反之不通過;
XCTAssertNoThrow(expression, format…)異常測試,當expression沒有發生異常時通過測試;
XCTAssertNoThrowSpecific(expression, specificException, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過;
XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過

參考:https://www.jianshu.com/p/be32739d8aae

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章