什麼是單元測試
首先什麼是單元測試?維基百科中的解釋是:
在計算機程式設計中,單元測試(又稱為模組測試
, 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...