單元測試淺談(一)

單元測試測試什么

對象一般都具有一定的狀態(tài)院促,我們寫的每一個方法党晋,要么會產(chǎn)生一個或者多個輸出,要么會改變一個或者多個對象的狀態(tài)哮翘,或者兼而有之颈嚼。如果一個方法既沒有輸出,也沒有改變?nèi)魏螌ο蟮臓顟B(tài)饭寺,那么這個方法是不必要存在的阻课。
單元測試主要測試的是一個類對外暴露的方法,通過執(zhí)行一個或者多個方法艰匙,來檢測對象的狀態(tài)或者輸出結(jié)果是否與預(yù)期一致限煞。

單元測試需要注意一下幾點:

  1. 盡量避免直接測試私有方法,當(dāng)私有方法過于復(fù)雜時员凝,應(yīng)該考慮重構(gòu)代碼署驻,將私有方法封裝的邏輯轉(zhuǎn)移到另一個對象中,成為公有方法健霹。
  2. 因為單元測試是基于有特定對象的旺上,所以無法測試構(gòu)造函數(shù)。當(dāng)構(gòu)造函數(shù)中包含復(fù)雜的邏輯時糖埋,需要重構(gòu)宣吱,將其移動到某個方法中。當(dāng)構(gòu)造函數(shù)中包含其他對象的創(chuàng)建邏輯時瞳别,將這個對象作為構(gòu)造函數(shù)的參數(shù)傳入征候。
  3. 單元測試覆蓋率不必要達(dá)到100%,因為覆蓋率越高祟敛,預(yù)期收益越低倍奢,對于那些特別簡單的邏輯或者單元測試無法驗證的邏輯可以不用測試,比如生成訂單號的邏輯垒棋,我們通過單元測試無法驗證生成的訂單號是否是唯一的卒煞,所以不必要做單元測試。

如何設(shè)計單元測試用例

Arrange(準(zhǔn)備)->Act(執(zhí)行)->Assert(斷言)

  1. 準(zhǔn)備階段:定義待測試的對象叼架,準(zhǔn)備合適的測試參數(shù)
  2. 執(zhí)行階段:執(zhí)行待測試的一個或者多個方法
  3. 斷言階段:檢測方法的輸出或者對象的狀態(tài)是否符合預(yù)期

比如對于方法計算最大公約數(shù)的代碼:

// Class: GCDCalculator
- (NSUInteger)GCDWithNumber1:(NSUInteger)number1 number2:(NSUInteger)number2 {
    NSUInteger remainder = number1 % number2;
    if (remainder == 0) {
        return number2;
    } else {
        return [self GCDWithNumber1:number2 number2:remainder];
    }
}

在準(zhǔn)備階段畔裕,我們需要創(chuàng)建一個GCDCalculator的對象,然后設(shè)計好合適的測試參數(shù)乖订,比如10和6
在執(zhí)行階段扮饶,我們調(diào)用方法-[CGCDCalculator GCDWithNumber1: number2:]得到一個結(jié)果
在斷言階段,我們驗證這個結(jié)果是否與我們預(yù)期的2一致

- (void)testGCD {
    // Arrange
    GCDCalculator *cal = [[GCDCaculator alloc] init];
    // Act
    NSUInteger gcd = [cal GCDWithNumber1:10 number2:6];
    // Assert
    XCTAssertEqual(gcd, 2, @"GCD failed");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乍构,一起剝皮案震驚了整個濱河市甜无,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖岂丘,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陵究,死亡現(xiàn)場離奇詭異,居然都是意外死亡奥帘,警方通過查閱死者的電腦和手機(jī)铜邮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寨蹋,“玉大人松蒜,你說我怎么就攤上這事∫丫桑” “怎么了秸苗?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長运褪。 經(jīng)常有香客問我难述,道長,這世上最難降的妖魔是什么吐句? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任胁后,我火速辦了婚禮,結(jié)果婚禮上嗦枢,老公的妹妹穿的比我還像新娘攀芯。我一直安慰自己,他們只是感情好文虏,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布侣诺。 她就那樣靜靜地躺著,像睡著了一般氧秘。 火紅的嫁衣襯著肌膚如雪年鸳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天丸相,我揣著相機(jī)與錄音搔确,去河邊找鬼。 笑死灭忠,一個胖子當(dāng)著我的面吹牛膳算,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弛作,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼涕蜂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了映琳?” 一聲冷哼從身側(cè)響起机隙,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蜘拉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后有鹿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旭旭,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年印颤,在試婚紗的時候發(fā)現(xiàn)自己被綠了您机。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穿肄。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡年局,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咸产,到底是詐尸還是另有隱情矢否,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布脑溢,位于F島的核電站僵朗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屑彻。R本人自食惡果不足惜验庙,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望社牲。 院中可真熱鬧粪薛,春花似錦、人聲如沸搏恤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熟空。三九已至藤巢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間息罗,已是汗流浹背掂咒。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留迈喉,地道東北人俏扩。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像弊添,于是被迫代替她去往敵國和親录淡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android單元測試介紹 處于高速迭代開發(fā)中的Android項目往往需要除黑盒測試外更加可靠的質(zhì)量保障油坝,這正是單...
    東經(jīng)315度閱讀 3,096評論 6 37
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,189評論 2 126
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程嫉戚、活動和任務(wù)的結(jié)構(gòu)性框架刨裆。軟件項目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 21,949評論 7 278
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程彬檀、活動和任務(wù)的結(jié)構(gòu)性框架帆啃。軟件項目的開發(fā)包括:需求、設(shè)...
    宇文臭臭閱讀 6,718評論 5 100
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理窍帝,服務(wù)發(fā)現(xiàn)努潘,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139