Unit Testing Tutorial:Mocking Objects(Part1)

本文翻譯自Unit Testing Tutorial:Mocking Objects
將分為兩部分翻譯,這是Part One.

誰需要單元測試?肯定不是你—你的代碼已經(jīng)灰常完美.所以呢......你僅僅是為你需要學(xué)習(xí)Swift單元測試的朋友讀讀而已?是吧. :]

Screen-Shot-2015-05-07-at-3.10.07-PM.png

單元測試能使代碼變得更好;能幫助你在開發(fā)過程中盡早地發(fā)現(xiàn)絕大多數(shù)的bug,更重要的是基于可測試的開發(fā)模式能使你寫出更加模塊化的容易維護(hù)的代碼.第一準(zhǔn)則:如果你的代碼不容易測試,那么將會不容易維護(hù)和debug.

單元測試能夠使"微小的特性"分離.通常你需要模擬類—提供模仿對象來實(shí)現(xiàn)功能上的動作—使微小的特性脫離出來便于測試.Objective-C中有許多第三方框架來實(shí)現(xiàn)對象的模擬和銷毀.但這些來源于不斷實(shí)踐和總結(jié)的庫,還不能在Swift中使用.未來的某天,希望會能用! :]

本教程中,你將學(xué)習(xí)如何編寫自己的mocks,fakes和stubs來測試一個(gè)幫助你記憶朋友生日的app.

  • 開端

下載起始項(xiàng)目;這是個(gè)可以連接網(wǎng)絡(luò)后臺的通訊錄app.你無須編寫app的核心功能;相應(yīng)地,你需要編寫一些測試來驗(yàn)證某些功能如預(yù)期一樣實(shí)現(xiàn).

運(yùn)行程序來看下它如何使用.點(diǎn)擊plus,在列表里增加一個(gè)人:

iOS-Simulator-Screen-Shot-31.03.2015-21.55.29-333x500.png

例子用Core Data來存儲你的通訊錄:

ragecomic_coredata1-433x320.png

莫慌張! :] 本教程中你不需要Core Data的任何經(jīng)驗(yàn);也沒有火箭科學(xué)(這是什么鬼?)

  • 單元測試的好處和壞處

當(dāng)開始測試之前,一個(gè)壞消息和一個(gè)好消息.壞消息是單元測試有許多壞處,比如下面的:

  1. More code: 大量的測試很容易使測試代碼量超過功能性的代碼量.
  2. More to maintain: 更多的代碼意味著需要更大精力的維護(hù)成本.
  3. No silver bullet: 單元測試不能(也不可能)消除你所有的bug.
  4. Takes longer: 寫測試花費(fèi)更多時(shí)間(而這些時(shí)間你本可以在raywenderlicn.com學(xué)更多新奇的知識).

雖然沒有銀彈,但卻有銀線—測試有如下的好處:

  1. Confidence: 你可以證明你代碼的可行性.
  2. Quick feedback: 你可以利用單元測試來使藏于你的app navigation里的深層級的代碼得到快速生效運(yùn)行—這在手工運(yùn)行測試時(shí)非常笨重低效.
  3. Modularity: 單元測試能使你寫出更加模塊化的代碼.
  4. Focus: 編寫微小特性的測試能使你專注于小細(xì)節(jié).
  5. Regression: 確保你修復(fù)的bug修復(fù)—不會在隨后的bug中出現(xiàn).
  6. Refactoring: 當(dāng)Xcode能夠智能地重構(gòu)你的代碼之前,你需要單元測試來使你重構(gòu)的代碼生效.
  7. Documentation: 單元測試能夠描述你的代碼用途;能作為另一種形式的代碼文檔.
  • App的基本結(jié)構(gòu)

許多例子應(yīng)用的代碼都基于勾選Core Data的Master-Detail Application模板.但在模板代碼中可以進(jìn)行一些明顯改進(jìn).Xcode中打開例子代碼來看下代碼導(dǎo)航:

Screen-Shot-2015-03-28-at-16.59.36.png

看下具體細(xì)節(jié):

  • 有個(gè)Person.swift和PersonInfo.swift文件.Person類是個(gè)NSManagedObject來包含每個(gè)人的一些基本信息.PersonInfo結(jié)構(gòu)體包含相同的信息,但能夠從地址薄中被實(shí)例化.
  • PeopleList文件夾有三個(gè)文件:一個(gè)view controller,一個(gè)data provider和一個(gè)data provider protocol.

PeopleList包含的文件用來避免view controllers過于臃腫.將一些功能性的代碼寫成和view controllers交互的單獨(dú)協(xié)議是避免view controller臃腫的好做法.你可以通過這篇文章來學(xué)習(xí)了解更多關(guān)于此話題的內(nèi)容.

本例中,協(xié)議被定義在PeopleListDataProviderProtocol.swift中;打開來瞅瞅.遵從此協(xié)議的類必須有managedObjectContext屬性和tableView且必須定義方法addPerson(_:)和fetch().另外,它必須繼承UITableViewDataSource協(xié)議.

PeopleListViewController有一個(gè)dataProvider屬性,它遵從PeopleListDataProviderProtocol協(xié)議.這個(gè)屬性在AppDelegate.swift里創(chuàng)建了PeopleListDataProvider實(shí)例.

你通過ABPeoplePickerNavigationController來添加人員到列表中.這個(gè)類使開發(fā)者無需明確地請求許可就能獲得用戶的通訊錄.

PeopleListDataProvider從Core Data中獲得數(shù)據(jù)填充到table view中.

下一篇將具體編寫單元測試的代碼,晚安 :)

Girl學(xué)iOS100天 第25天

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吗冤,一起剝皮案震驚了整個(gè)濱河市又厉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椎瘟,老刑警劉巖覆致,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肺蔚,居然都是意外死亡煌妈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門宣羊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來璧诵,“玉大人,你說我怎么就攤上這事仇冯≈蓿” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵苛坚,是天一觀的道長比被。 經(jīng)常有香客問我,道長泼舱,這世上最難降的妖魔是什么等缀? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮娇昙,結(jié)果婚禮上尺迂,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好枪狂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布危喉。 她就那樣靜靜地躺著,像睡著了一般州疾。 火紅的嫁衣襯著肌膚如雪辜限。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天严蓖,我揣著相機(jī)與錄音薄嫡,去河邊找鬼。 笑死颗胡,一個(gè)胖子當(dāng)著我的面吹牛毫深,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毒姨,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼哑蔫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弧呐?” 一聲冷哼從身側(cè)響起闸迷,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俘枫,沒想到半個(gè)月后腥沽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸠蚪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年今阳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茅信。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盾舌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蘸鲸,到底是詐尸還是另有隱情矿筝,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布棚贾,位于F島的核電站,受9級特大地震影響榆综,放射性物質(zhì)發(fā)生泄漏妙痹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一鼻疮、第九天 我趴在偏房一處隱蔽的房頂上張望怯伊。 院中可真熱鬧,春花似錦判沟、人聲如沸耿芹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧秕。三九已至琉闪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砸彬,已是汗流浹背颠毙。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砂碉,地道東北人蛀蜜。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像增蹭,于是被迫代替她去往敵國和親滴某。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫滋迈、插件霎奢、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,030評論 4 62
  • 你似一摟青青的柳 在迷迷濛濛的雨中繡著憂愁 很少看到你會心的一笑 盈盈地在天空里漂流 漂流著春與夏的邂逅 在春天必...
    達(dá)時(shí)代閱讀 325評論 0 1
  • 文藝其實(shí)是一個(gè)很棒的臭毛病, 可能很多人看不懂文藝杀怠,覺得文藝是矯情椰憋,是作。 大家活著本來就很累了赔退,忙忙碌碌干不完的...
    諾諾是路明非的閱讀 271評論 0 0
  • 粵北行
    陳紅_91b9閱讀 119評論 0 0