背景
開發iOS版IM客戶端的過程中,經常需要測試SDK的裏面的業務邏輯,比如協議頭是否正確,需要和服務器通信調試一下。這個時候如果寫一個頁面,通過按鈕點擊的方式調用,顯得比較多餘。所以就想到了swift中如何使用單元測試,特此記錄。
macos:10.15.3
xcode:11.3.1
最近更新時間:2020-03-16
步驟
創建單元測試項目
直接默認,finish即可。
創建單元測試文件
在新創建的單元測試項目中,右擊。
輸入測試的文件名+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
單元測試可以分模塊來,也可以分小功能來,你開心就好了
這是用到系統自帶的單元測試,網上也有其他的方案
測試結果和列表:
刪除單元測試項目
- 刪除單元測試文件夾,比如"CoffchatTests"
- 刪除target,具體如下(如果只刪除文件夾,不刪除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沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過