單元測試基礎

来源:http://www.cnblogs.com/windsSunShine/archive/2016/08/04/5736977.html
-Advertisement-
Play Games

開發和測試向來就是一對冤家,再加上產品再添一把火,不吵才是奇跡呢。所以一般我們開發的時候儘可能的減少一些小的失誤,比如說獲取的數值為空,判定條件不充分、當然還有面對測試人員測試時將軟體暴力測試,出現一些網路解析數據的延遲有時也是無法避免的。可是這些確實是一些困擾。但是為了提高開發的效率,犯這些小錯誤 ...


        開發和測試向來就是一對冤家,再加上產品再添一把火,不吵才是奇跡呢。所以一般我們開發的時候儘可能的減少一些小的失誤,比如說獲取的數值為空,判定條件不充分、當然還有面對測試人員測試時將軟體暴力測試,出現一些網路解析數據的延遲有時也是無法避免的。可是這些確實是一些困擾。但是為了提高開發的效率,犯這些小錯誤也是在所難免。綜合對比了一下,覺得還是效率的提高還是離不開自己程式的健壯性,提到健壯性那就得保證程式中的模塊沒有問題,那當然離不開單元測試的幫助了。

        單元測試是對程式中的小函數,類、或者是路徑等等的直接檢測,雖然不是必須,卻在提高編程效率上有著很關鍵的作用。針對OC編程,一種面向對象的編程方式。通常測試的就是某個關鍵的方法(函數),或者是某個值的判定之類的。能進行單元測試的工程,耦合度上也不會很高,這樣也對我們的代碼的做了簡化,減少了程式之間的耦合度,有助於開發高質量的代碼,實現敏捷開發。

        在Xcode中有其自帶的OCUnit測試框架,在我們創建工程的時候即可以選擇,選擇完,工程中就會多出兩個以Tests結尾的文件,文件是該類繼承自XCTestCase類,其中包含三個方法:setUp,tearDown和testExample。

        setUp方法是每個測試方法調用執行,用於在測試前設置好要測試的方法,tearDown是每個測試方法調用執行是在測試後將設置好的要測試的方法寫在裡面。testExample顧名思義就是一個示例和我們的自己創建的測試方法一樣。不過測試方法必須testXXX的格式,且不能有參數,,不能有返回值,不然不會識別為測試方法。測試方法的執行順序是字典序排序。按快捷鍵Command + U進行單元測試,這個快捷鍵是全部測試,點擊之後所有的測試用例就會順序執行。雖然測試用例在每一個工程中都會有不盡相同的寫法,但是涉及到的斷言卻是一樣的。針對測試類中的18的斷言做了以下摘錄,以備查用。

 

XCTFail(...)

任何嘗試都會測試失敗,...是輸出的提示文字。(後面都是這樣)

XCTAssertNil(expression, ...)

expression為空時通過,否則測試失敗。

expression接受id類型的參數。

 

XCTAssertNotNil(expression, ...)

expression不為空時通過,否則測試失敗。

expression接受id類型的參數。

 

XCTAssert(expression, ...)

expression為true時通過,否則測試失敗。

expression接受boolean類型的參數。

 

XCTAssertTrue(expression, ...)

expression為true時通過,否則測試失敗。

expression接受boolean類型的參數。

 

XCTAssertFalse(expression, ...)

expression為false時通過,否則測試失敗。

expression接受boolean類型的參數。

 

XCTAssertEqualObjects(expression1, expression2, ...)

expression1和expression1地址相同時通過,否則測試失敗。

expression接受id類型的參數。

 

XCTAssertNotEqualObjects(expression1, expression2, ...)

expression1和expression1地址不相同時通過,否則測試失敗。

expression接受id類型的參數。

 

XCTAssertEqual(expression1, expression2, ...)

expression1和expression1相等時通過,否則測試失敗。

expression接受基本類型的參數(數值、結構體之類的)。

 

XCTAssertNotEqual(expression1, expression2, ...)

expression1和expression1不相等時通過,否則測試失敗。

expression接受基本類型的參數。

 

XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, ...)

expression1和expression2之間的任何值都大於accuracy時,測試失敗。

expression1、expression2、accuracy都為基本類型。

 

XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, ...) 

expression1和expression2之間的任何值都小於等於accuracy時,測試失敗。

expression1、expression2、accuracy都為基本類型。

 

XCTAssertGreaterThan(expression1, expression2, ...)

expression1 <= expression2時,測試失敗。

expression為基本類型

 

 

XCTAssertGreaterThanOrEqual(expression1, expression2, ...)

expression1 < expression2時,測試失敗。

expression為基本類型

 

XCTAssertLessThan(expression1, expression2, ...)

expression1 >= expression2時,測試失敗。

expression為基本類型

 

XCTAssertLessThanOrEqual(expression1, expression2, ...)

expression1 > expression2時,測試失敗。

expression為基本類型

 

XCTAssertThrows(expression, ...)

expression沒拋異常,測試失敗。

expression為一個表達式

 

XCTAssertThrowsSpecific(expression, exception_class, ...)

expression沒拋指定類的異常,測試失敗。

expression為一個表達式

exception_class為一個指定類

 

XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, ...)

expression沒拋指定類、指定名字的異常,測試失敗。

expression為一個表達式

exception_class為一個指定類

exception_name為一個指定名字

 

XCTAssertNoThrow(expression, ...)

expression拋出異常時,測試失敗。

expression為一個表達式

 

XCTAssertNoThrowSpecific(expression, exception_class, ...)

expression拋出指定類的異常,測試失敗。

expression為一個表達式

 

XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, ...)

expression拋出指定類、指定名字的異常,測試失敗。

expression為一個表達式

exception_class為一個指定類

 

 

 

exception_name為一個指定名字

 

最後附文檔一篇,以備修正

https://developer.apple.com/legacy/library/documentation/DeveloperTools/Conceptual/UnitTesting/AB-Unit-Test_Result_Macro_Reference/result_macro_reference.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 1. 關於值棧: 1). 登陸 時, ${userName} 讀取 userName 值, 實際上該屬性並不在 request 等域對象中, 而是從值棧中獲取的. 2). ValueStack: I. 可以從 ActionContext 中獲取值棧對象 //1. 獲取值棧 ValueStack va ...
  • 簡訊驗證碼 簡訊下行 簡訊下行的使用場景 簡訊驗證碼就是最常用的一個簡訊下行的例子,相對於傳統的圖片驗證碼,簡訊驗證碼最大的好處就是提升了賬號的有效性,註冊這一般都是使用自己的手機號嗎。當然了,除此之外簡訊驗證碼還可以用於登陸,方便快捷。 簡訊下行的設計 簡訊下行的驗證方式,較上行驗證碼簡單很多,這 ...
  • 一、NumPy 是什麼 NumPy 是 Python 科學計算的基礎包,它專為進行嚴格的數字處理而產生。在之前的隨筆里已有更加詳細的介紹,這裡不再贅述。 利用 Python 進行數據分析(一)簡單介紹 二、ndarray 是什麼 ndarray 是一個多維的數組對象,具有矢量算術運算能力和複雜的廣播 ...
  • 原題鏈接http://acm.hust.edu.cn/vjudge/contest/121397#problem/A 題意:t組數據,每組一個n 求 1+1/2+1/3+1/4 ......+1/n的和 方法:打表 沒100個存一個,不夠100的跑一趟 #include <iostream>#inc ...
  • 解析優化 參見之前介紹的DNS過程,如下圖: 基於可控和容災的需要,移動端代碼一般不會hardcode 推流、播放的伺服器IP地址,而選用功能變數名稱代替。在IP出現宕機或網路中斷的情況下,還可以通過變更DNS來實現問題IP的剔除。而功能變數名稱的解析時間需要幾十毫秒至幾秒不等,對於新生成熱度不高的功能變數名稱,一般的平均 ...
  • QStatusBa,狀態欄是位於主視窗的最下方,提供一個顯示工具提示等信息的地方。QMainWindow類裡面就有一個statusBar()函數,用於實現狀態欄的調用。以下例子都在QMainWindow的視窗前提下運行。 1.狀態欄添加 QLabel QLabel *msgLabel = new Q ...
  • QWhatsThis,為任何widget提供簡單的描述,回答"What's This?"這個問題。 示例:(在MainWindow下運行) 定義全局變數 QAction *newAct; QMenu *fileMenu; void MainWindow::creatActions() { newAc ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...