iOS 單元測試4 單元測試編碼規範

2021-07-13 13:08:29 字數 1549 閱讀 4780

編寫單元測試與編寫工程**略有不同。我們需要準備資料,mock物件,呼叫工程api,驗證結果。而且一般測試**都會比工程**要大。就像real-world testing with xctest一文中提到「目前為止,我們的編碼庫已經縱橫 190 個檔案和 18,000 行**,達到了 544 kb。我們測試部分的**現在差不多有1,200 kb,大概有被測試**的兩倍」。那麼應該如何定義單元測試**編寫規範,使得**更整潔,可讀性更高呢?

為了工程**的保密,文中的**在命名的時候在不影響理解的情況下都做了改動

每個case其實都可以分為三步走,1.mock物件,準備測試資料。2.呼叫目標api 3.驗證輸出和行為。所以我們可以用如下方式將3步分別放入given-when-then三個分段中。(為了保密,**做了改動)

- (void)testneedtoshowrowwhentypeisall
這樣我們一眼掃過去就可以清晰的看出乙個case大體上都在幹什麼。

可能我們呼叫的乙個api內部有乙個if…else…。我建議if乙個case,else乙個case。分兩個不同的case來作測試.這樣每個case就很清晰自己在測試什麼東西。而如果全部雜糅在乙個case中,可讀性會降低不少,而且case體積也會變得相對大很多,因為你要given-when-then兩次。更不建議在case中寫for迴圈驗證。有人說我的測試目標函式中有很多if…else…,那麼我覺得你應該重構下你的設計了。

所以,我們的結論是乙個case只測試一種情況,不同情況用when標明:

- (void)testneedtoshowrowwhentypeisall

- (void)testneedtoshowrowwhentypeisonsell

乙個測試檔案只有乙個被測試類。但是當我們的測試檔案越來越多的時候,當我們看乙個測試case的時候需要看懂這個case才明白我們的被測試類是誰。或者我們也可以看測試檔名(******test.m)才知道我們的被測試類是誰,但是這樣卻不是很直觀。所以不管我們在那個測試檔案中,測試的類是誰,叫什麼名字,我們都以為乙個區域性變數名_sut來定義我們的被測試類。這樣我們一眼就能知道我們被測試類是誰。

_sut就是system under test的縮寫。

@implementation

jhscollectiondatasourcetest

- (void)testneedtoshowheaderwhentypeisall

我們的測試case中呼叫的方法可能會改變乙個私有的屬性,呼叫乙個私有的方法。怎麼去優雅的驗證這種行為呢,我們可以在測試檔案的開頭用乙個名字為unittest的category來暴露出我們的私有方法和屬性(屬性暴露的是屬性對應的getter和setter方法)。

@inte***ce

jhstestdatasource (unittest)

- (nsinteger)getsellgroupcount;

- (bool)needshowheader:(nsinteger)section;

@end

enjoy it!

單元測試 單元測試編寫的原則

公司要求提公升單元測試的質量,其中我作為方案和推動的主導,對開發過程中的單元測試,有了一些思考和總結 單元測試編寫的目的,是面向計算機特性的,基於函式的in out,所以單元測試的好幫手就是斷言,通過不斷的構造輸出並對結果進行斷言,我們就可以針對乙個物件以及它的函式,構建出充足的用例去包裹它,以期望...

iOS 單元測試

進入測試tab,可以執行工程自帶的測試用例。我們新增乙個自己的測試用例samplecalctests 在生成的samplecalctest.m中新增標頭檔案引用和成員變數 import ios calcviewcontroller.h inte ce samplecalctests xctestca...

iOS 單元測試

新增測試用例步驟及示例 xctest,它是xcode7中內建的測試框架,使用起來非常簡單 1.新建工程的時候新增測試單元 2.單元測試示例 咱們在這假設乙個使用者向主播送禮物場景,根據使用者送的禮物不同消耗的代金幣不同 user 使用者 present 禮物 anchor 主播 present類 p...