2009-02-26 62 views

回答

7

啊予以考慮。我最喜歡的科目:-)從哪裏開始?

據傑拉德·梅薩羅斯(閱讀本書對單元測試)的xUnit測試模式

  • 測試應該降低風險,不 介紹吧。
  • 測試應該很容易運行。
  • 測試應易於維護 系統升級的身邊

有些事情要使它更容易些:

  • 測試只能失敗,因爲一個 原因。 (測試應該只測試一件事,例如避免多次斷言。)
  • 應該只有一個測試因爲這個原因而失敗。 (這讓你的testbase維護)
  • 最小化測試依賴

其他的事情(在數據庫,文件,UI 等沒有 依賴)查看:

命名
有一個描述性名稱。測試名稱應該像規範一樣閱讀。如果你的名字太長,你可能會測試太多。

結構
使用AAA結構。這是模擬框架的新時尚,但我認爲這是一種很好的方式來構建像這樣的所有測試。

安排您的上下文
法,這樣做需要的東西進行測試
斷言,聲稱要檢查

我通常把我的測試中的代碼三個大塊內容。瞭解這種模式使得測試更具可讀性。

嘲弄與存根
當使用模擬框架總是試圖訴諸嘲諷前使用存根和基於狀態的測試。

存根是代表您試圖測試的對象的依賴關係的對象。您可以將行爲編程到它們中,並且可以在測試中調用它們。嘲笑通過讓你聲明他們是否被調用以及如何進行擴展。嘲笑是非常強大的,但它可以讓你測試實現,而不是你的代碼的前後條件。這往往會使測試更脆弱。

+0

+1的xUnit測試模式書是一個必須IMO的人想寫出好的單元測試。 – mezoid 2009-02-26 08:17:21

+0

+1,但我不得不說這本書似乎更多地是關於自動測試,而不是「單元測試」本身。 – Spoike 2009-02-26 08:49:28

1
  • 不能訪問外部資源
  • 可讀
3

Pragmatic Programmers的答案:好的測試應是A-TRIP

  • 自動
  • 徹底
  • 重複
  • 獨立
  • 專業
1
  • 可自動化:沒有人工干預,應要求運行測試(CI)。
  • 完成:它們必須涵蓋儘可能多的代碼(Code Coverage)。
  • 可重複使用:無需創建將只執行一次的測試。
  • 獨立:獨立執行測試不應該影響另一個的性能。
  • 專業:測試應該具有相同的值作爲代碼,同樣的專業精神,文檔等
0

其他要記住的因素是運行時間。如果測試運行時間過長,可能會被跳過。

0
  1. 必須是全自動的。
  2. 不得假設任何先決條件 (產品X被安裝,文件和Y 位置等)。
  3. 必須是獨立人士,儘可能 運行腳本有關。但是,結果可以僅由專家專家分析 。
  4. 必須在每個測試版上運行。
  5. 必須提供可驗證的報告。
0

單元測試應該很快:幾百個測試應該能夠在幾秒鐘內運行。

1

我沒見過其他人提到的一個是。單元測試應該測試一件特定的事情,就是這樣。我試圖通過將它們重構爲自己的方法來實現只有一個斷言並最小化設置代碼的數量。我也會創建我自己的自定義斷言。一個很好的小單元測試IMO大約10行或更少。當一個測試很小時,很容易就能很快理解測試正在做什麼。從長遠來看,大型測試最終無法維持。

當然,小事不是我唯一的目標......它只是我在單元測試中看重的東西之一。 :-)

0

測試是不是一個單元測試,如果:

  • 它談論到數據庫
  • 它通過網絡
  • 通信倒是文件系統
  • 這不可能與任何其他單元測試同時運行
  • 您必須對您的環境執行特殊的操作(例如編輯配置文件)才能運行它。

做這些事情的測試並不差。通常他們值得寫作,而且可以用單元測試工具編寫。但是,能夠將它們與真正的單元測試分開很重要,以便我們可以保留一組測試,以便在進行更改時能夠快速運行。

來源:A Set of Unit Testing Rules