iOS開發單元測試

2021-07-02 13:20:39 字數 4385 閱讀 9201

什麼是單元測試

首先什麼是單元測試?維基百科中的解釋是:

在計算機程式設計中,單元測試(又稱為模組測試

, unit testing

)是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作。程式單元是應用的最小可測試部件。在過程化程式設計中,乙個單元就是單個程式、函式、過程等;對於物件導向程式設計,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

通常來說,程式設計師每修改一次程式就會進行最少一次單元測試,在編寫程式的過程中前後很可能要進行多次單元測試,以證實程式達到軟體規格書(

en:specification

)要求的工作目標,沒有程式錯誤;雖然單元測試不是什麼必須的,但也不壞,這牽涉到專案管理的政策決定。

單元測試的目標是隔離程式部件並證明這些單個部件是正確的。

[2]乙個單元測試提供了**片斷需要滿足的嚴密的書面規約。因此,單元測試帶來了一些益處。

單元測試在

軟體開發過程

的早期就能發現問題。

原文還提到乙個概念:

tdd(test-driven development)

,即測試驅動開發,

測試驅動開發

test-driven development

)是極限程式設計

中倡導的程式開發方法,以其倡導先寫測試程式,然後編碼實現其功能得名。測試驅動開發始於

20世紀

90年代。測試驅動開發的目的是取得快速反饋並使用

「illustrate the main line」

方法來構建程式。

測試驅動開發是戴兩頂帽子思考的開發方式:先戴上實現功能的帽子,在測試的輔助下,快速實現其功能;再戴上

重構的帽子,在測試的保護下,通過去除冗餘的**,提高**質量。測試驅動著整個開發過程:首先,驅動**的設計和功能的實現;其後,驅動**的再設計和重構。

setup&teardown

#import #import #import "person.h"

#import "singletontest.h"

@inte***ce test : xctestcase

@end

@implementation test

- (void)setup

- (void)teardown

//- (void)testexample

- (void)test5

- (void)test6

- (void)share

- (void)testtrue3

- (void)testtrue2

- (void)testtrue

- (void)testtrue4

- (void)testperformanceexample ];

}

該類繼承自xctestcase類,其中包含三個方法setup、teardown和testexample。

setup方法在每乙個測試方法執行前都會執行一次。teardown在每個測試方法執行後都執行一次

從控制台輸出的資訊可以看到,測試方法是有一定的執行順序,可以發現,是按照字典順序來執行,例如我寫了test5,test6,testtrue,testtrue2,他們的執行順序應該就是以上順序

斷言測試

下面一共

18個斷言(

sdk中也是

18個,其含義**

ios unittest

學習筆記)

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語言標量、結構體或聯合體時使用

,實際測試發現

nsstring

也可以);

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

沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過

既然sdk給我們提供了18個斷言測試,那我們就用一用

首先我們要知道,我們的測試方法必須是test***x,以我的專案為例

- (void)test5

- (void)test6

- (void)test4

就test4方法而言,網上有眾多網友說這是乙個bug。為什麼會出現這種情況,在此解釋下:

你將會得到string1和string2的位址值竟然是相等的,這是編譯器優化的結果。由於常量會占用一塊特殊的**段,載入到記憶體時會對映到一塊常量儲存區,以加快訪問速度,編譯器在編譯時發現string1和string2的內容是相同常量字串,會把它們都指向乙個相同的區域,而不是再開闢出一塊額外的空間。因此它們是相同的位址值(濤哥的解釋很給力)。

ok,今天就到這了,如有不當之處還請之處,不喜勿噴。謝謝

iOS 開發測試(單元測試 UI測試)

本文只講開發測試內容 加快檢查速度 減少除錯時間 質量得到保證 測試基本結構 三段式結構 1 given 2.when 3.then given 測試條件 when 呼叫測試方法 then 斷言 xctassertequal c,6 像 ocmock依賴注入,可以模擬出所需要的條件 下面簡單寫乙個d...

iOS 單元測試

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

iOS 單元測試

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