iOS 單元測試和UI測試

什么是單元測試

  • 檢查是否每個代碼單元(例如類或函數(shù))是否能產(chǎn)生預(yù)期的結(jié)果
  • 獨立運行的马昙,不依賴于其他模塊或組件

什么是UI測試

  • 是屬于端到端的測試,是從應(yīng)用程序啟動到結(jié)束的測試過程
  • 完全按照用戶和應(yīng)用程序交互的方式來復(fù)制與應(yīng)用程序的交互
  • 比單元測試慢,運行起來更耗費資源

測試注意事項

測試應(yīng)該涵蓋:
  • 核?功能:模型類和?法及其與控制器的交互
  • UI?作流程
  • 特殊的邊界條件
  • Bug處理
測試原則FIRST
  • Fast:測試模塊應(yīng)該是快速?效的诀蓉;
  • Independent/Isolated:測試模塊應(yīng)該是獨?相互不影響的浸遗;
  • Repeatable :測試實例應(yīng)該是可以重復(fù)使?的,測試結(jié)果應(yīng)該是相同的驾胆;
  • Self-validating:測試應(yīng)完全?動化涣澡。輸出結(jié)果要么是“成功”,要么是“失敗”丧诺;
  • Timely:理想情況下入桂,應(yīng)該在編寫要測試的?產(chǎn)代碼之前編寫測試(測試驅(qū)動開發(fā))

單元測試

  • 可以通過新建TestAppDelegate,防止業(yè)務(wù)代碼對測試的影響
int main(int argc, char * argv[]) {
    NSString * appDelegateClassName;
    @autoreleasepool {
        // Setup code that might create autoreleased objects goes here.        
        id XCTest = NSClassFromString(@"XCTest");

        appDelegateClassName = XCTest ? @"TestAppDelegate" :  NSStringFromClass([AppDelegate class]);
    }
    return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}
  • 通過Product --> Test運行項目后锅必,我們打開當前程序的可執(zhí)行文件事格,會發(fā)現(xiàn)多了一個YPLoginAppUITests-Runner.app

    image.png

  • 顯示YPLoginAppUITests-Runner.app的包內(nèi)容,發(fā)現(xiàn)里面有三個動態(tài)庫

    image.png

  • 新建一個YPLoginApp.test.xcconfig文件配置測試環(huán)境搞隐,鏈接動態(tài)庫XCTest

XCODE_LIBARAR = /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library

FRAMEWORK_SEARCH_PATHS = $(inherited) "${XCODE_LIBARAR}/Frameworks"

HEADER_SEARCH_PATHS = $(inherited)  "${XCODE_LIBARAR}/Frameworks/XCTest.framework/Headers"
   

OTHER_LDFLAGS = $(inherited) -framework "XCTest"

LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '${XCODE_LIBARAR}/PrivateFrameworks' '${XCODE_LIBARAR}/Frameworks'
  • 現(xiàn)在可以直接在項目中手動調(diào)用XCTest驹愚,實現(xiàn)邊運行邊測試
#import <XCTest/XCTest.h>

   // 管理者 XCTestSuite
    XCTestSuite *suite = [XCTestSuite defaultTestSuite];
    // 初始化 testCase
    LoginAppUITests *testCase = [LoginAppUITests new];
    // testCase --> suite
    [suite addTest:testCase];
    for (XCTest *test in suite.tests) {
        [test runTest];
    }
    //指定執(zhí)行的具體sel
    //[suite addTest:[LoginAppUITests testCaseWithSelector:@selector(testExample)]];
  • 可以通過添加測試斷點來進行調(diào)試
    image.png

第三方庫

SYTimer
SYCSSColor

  • 我們可以通過pod導(dǎo)入SYTimerSYCSSColor到測試項目中

  • Product --> Test運行后,可以看到項目中具體文件執(zhí)行的代碼比例

    image.png

  • 點擊箭頭劣纲,跳轉(zhuǎn)到具體代碼頁逢捺,其中紅色代表未使用的代碼,綠色代表使用的代碼癞季,紅色注釋形狀代表此處部分代碼被使用


    image.png
代表

UI測試

  • 下面是一個賬號密碼登錄的測試劫瞳,可以實現(xiàn)自動登錄
    XCUIApplication *app = [[XCUIApplication alloc] init];
    [app launch];
    XCUIElement *nameinputTextField = app.textFields[@"nameInput"];
    XCUIElement *passwordInputTextField = app.secureTextFields[@"passwordInput"];
    [nameinputTextField tap];
    [nameinputTextField typeText:@"Cat\n"];
    
    [passwordInputTextField doubleTap];
    [passwordInputTextField typeText:@"123"];

    [app.buttons.staticTexts[@"登錄"] tap];
  • 其中nameInputpasswordInput绷柒、登錄是通過accessibilityIdentifiler或者accessibilityLabel屬性設(shè)置標志
    image.png

第三方

KIF -- UI自動化測試框架

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末志于,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子废睦,更是在濱河造成了極大的恐慌伺绽,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奈应,居然都是意外死亡澜掩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門杖挣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肩榕,“玉大人,你說我怎么就攤上這事惩妇≈旰海” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵歌殃,是天一觀的道長郎逃。 經(jīng)常有香客問我,道長挺份,這世上最難降的妖魔是什么褒翰? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮匀泊,結(jié)果婚禮上优训,老公的妹妹穿的比我還像新娘。我一直安慰自己各聘,他們只是感情好揣非,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躲因,像睡著了一般早敬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上大脉,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天搞监,我揣著相機與錄音,去河邊找鬼镰矿。 笑死琐驴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的秤标。 我是一名探鬼主播绝淡,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苍姜!你這毒婦竟也來了牢酵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衙猪,失蹤者是張志新(化名)和其女友劉穎馍乙,沒想到半個月后玉罐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡潘拨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饶号。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铁追。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茫船,靈堂內(nèi)的尸體忽然破棺而出琅束,到底是詐尸還是另有隱情,我是刑警寧澤算谈,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布涩禀,位于F島的核電站,受9級特大地震影響然眼,放射性物質(zhì)發(fā)生泄漏艾船。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一高每、第九天 我趴在偏房一處隱蔽的房頂上張望屿岂。 院中可真熱鬧,春花似錦鲸匿、人聲如沸爷怀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽运授。三九已至,卻和暖如春乔煞,著一層夾襖步出監(jiān)牢的瞬間吁朦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工渡贾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喇完,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓剥啤,卻偏偏與公主長得像锦溪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子府怯,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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

  • 前言 單元測試和UI測試大致步驟網(wǎng)上很多文章都有刻诊,如果會的可以忽略,關(guān)鍵是錯誤總結(jié)牺丙,網(wǎng)上很少有文章提及到则涯,感興趣的...
    _YGL_閱讀 5,175評論 20 23
  • 單元測試不是一個小工程复局,需要多用些時間才能做好,不要希望通過這個文章就能掌握單元測試粟判,這只是一個入門亿昏,需要自己動手...
    勇不言棄92閱讀 7,819評論 9 60
  • https://juejin.im/post/5c1b60a8e51d4523ca0a14c6 單元測試 http...
    貝灬小暉閱讀 244評論 0 0
  • 找出要測試的內(nèi)容 在編寫任何測試之前,了解基礎(chǔ)知識很重要档礁。您需要測試什么角钩? 如果您的目標是擴展現(xiàn)有應(yīng)用程序,則應(yīng)首...
    Joker_King閱讀 873評論 0 1
  • 編寫測試可不是一項迷人的工作;然而呻澜,由于測試可以避免使你的寶貝應(yīng)用程序變成一塊充斥錯誤的大垃圾場递礼,所以編寫測試又是...
    cosWriter閱讀 1,582評論 0 4