回覆列表
  • 1 # lanfengkd

    使用框架來用於單元測試

    Java提供了若干用於單元測試的框架。TestNG和JUnit是最流行的測試框架。JUnit和TestNG的一些重要功能:

    易於設定和執行。

    支援註釋

    允許忽略或分組並一起執行某些測試。

    支援引數化測試,即透過在執行時指定不同的值來執行單元測試。

    透過與構建工具,如Ant,Maven和Gradle整合來支援自動化的測試執行。

    EasyMock是一個模擬框架,是單元測試框架,如JUnit和TestNG的補充。EasyMock本身不是一個完整的框架。它只是添加了建立模擬物件以便於測試的能力。例如,我們想要測試的一個方法可以呼叫從資料庫獲取資料的DAO類。在這種情況下,EasyMock可用於建立返回硬編碼資料的MockDAO。這使我們能夠輕鬆地測試我們意向的方法,而不必擔心資料庫訪問。

    謹慎使用測試驅動開發!

    測試驅動開發(TDD)是一個軟體開發過程,在這過程中,在開始任何編碼之前,我們基於需求來編寫測試。由於還沒有編碼,測試最初會失敗。然後寫入最小量的程式碼以透過測試。然後重構程式碼,直到被最佳化。

    目標是編寫覆蓋所有需求的測試,而不是一開始就寫程式碼,卻可能甚至都不能滿足需求。TDD是偉大的,因為它導致簡單的模組化程式碼,且易於維護。總體開發速度加快,容易發現缺陷。此外,單元測試被建立作為TDD方法的副產品。

    然而,TDD可能不適合所有的情況。在設計複雜的專案中,專注於最簡單的設計以便於透過測試用例,而不提前思考可能會導致巨大的程式碼更改。此外,TDD方法難以用於與遺留系統,GUI應用程式或與資料庫一起工作的應用程式互動的系統。另外,測試需要隨著程式碼的改變而更新。

    因此,在決定採用TDD方法之前,應考慮上述因素,並應根據專案的性質採取措施。

    測量程式碼覆蓋率

    程式碼覆蓋率衡量(以百分比表示)了在執行單元測試時執行的程式碼量。通常,高覆蓋率的程式碼包含未檢測到的錯誤的機率要低,因為其更多的原始碼在測試過程中被執行。測量程式碼覆蓋率的一些最佳做法包括:

    使用程式碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測試質量,因為這些工具可以指出未經測試的程式碼區域,讓你能夠開發開發額外的測試來覆蓋這些領域。

    每當寫入新功能時,立即寫新的測試覆蓋。

    確保有測試用例覆蓋程式碼的所有分支,即if / else語句。

    高程式碼覆蓋不能保證測試是完美的,所以要小心!

    儘可能將測試資料外部化

    在JUnit4之前,測試用例要執行的資料必須硬編碼到測試用例中。這導致了限制,為了使用不同的資料執行測試,測試用例程式碼必須修改。但是,JUnit4以及TestNG支援外部化測試資料,以便可以針對不同的資料集執行測試用例,而無需更改原始碼。

    使用斷言而不是Print語句

    許多新手開發人員習慣於在每行程式碼之後編寫System.out.println語句來驗證程式碼是否正確執行。這種做法常常擴充套件到單元測試,從而導致測試程式碼變得雜亂。除了混亂,這需要開發人員手動干預去驗證控制檯上列印的輸出,以檢查測試是否成功執行。更好的方法是使用自動指示測試結果的斷言。

    構建具有確定性結果的測試

    一些方法不具有確定性結果,即該方法的輸出不是預先知道的,並且每一次都可以改變

    除了正面情景外,還要測試負面情景和邊緣情況

    通常,開發人員會花費大量的時間和精力編寫測試用例,以確保應用程式按預期工作。然而,測試負面測試用例也很重要。負面測試用例指的是測試系統是否可以處理無效資料的測試用例。例如,考慮一個簡單的函式,它能讀取長度為8的字母數字值,由使用者鍵入。除了字母數字值,應測試以下負面測試用例:

    使用者指定非字母數字值,如特殊字元。

    使用者指定空值。

    使用者指定大於或小於8個字元的值。

    類似地,邊界測試用例測試系統是否適用於極端值。例如,如果使用者希望輸入從1到100的數字值,則1和100是邊界值,對這些值進行測試系統是非常重要的。

  • 中秋節和大豐收的關聯?
  • 蘋果2018年春季會發布帶有Face ID技術的Ipad或Iphone SE嗎?