編寫單元測試與編寫工程**略有不同。我們需要準備資料,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...