2012-07-05 89 views
0

的基本問題是「應該如何一個有寫單元測試和集成測試啓動一個未經測試的項目呢?特別是考慮到一個事實,即人是不熟悉的代碼沒有做過集成測試。方法從頭進行單元測試和集成測試的未經測試的代碼

考慮場景單元測試和集成測試有一個項目被寫入。該項目使用Java/J2EE技術​​根本沒有任何測試。

我面對的困境是因爲我沒有寫代碼,我不想立即重構代碼來編寫測試。我也必須選擇一個測試框架。我正在考慮使用Mockito和Powermock。

我也必須估計測試的代碼覆蓋率。然後執行集成測試。我將不得不研究集成測試工具並選擇一個。之前,我還沒有做過任何集成測試或估計可接受的代碼覆蓋率。

因爲我獨立工作,如果有一些策略,提示,我應該開始一個可以推薦建議和工具,我將不勝感激。

+2

必須鏈接到http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 – 2012-07-05 17:35:42

回答

2

首先是第一:

  1. 瞭解架構,有哪些主要部件?
  2. 如果你的特點沒有很好的概述和功能的程序提供,使他們的列表,並創建它們的層次結構
  3. 熟悉的代碼,我推薦以下方法:
    • 後您瞭解其不同組件的代碼在哪裏開始,試着找出方法調用層次結構(在Eclipse中,您可以通過按F3輕鬆跳轉源代碼定義)
    • 稍後,您可以在調試代碼時執行相同的操作,這樣它會自動跳到定義,再加上你可以觀察程序的狀態如何變化

單元測試本身,我可以推薦Clean Code第9章(大約12頁)對於初學者。它使用JUnit作爲示例,並給出了一個很好的介紹瞭如何進行良好的測試。

在那裏你會學到像F.I.R.S.T.原則上,單元測試應該是:

快速,獨立的,可重複的,自我驗證和Timly

一些澄清,JUnit是最常用的和可接受的測試框架本身。 Mockito和Powermock是嘲諷的框架,當你想做集成測試時,它們與JUnit一起使用。

對於代碼覆蓋率,我只能推薦Cobertura,但有很多more

Cobertura

開始與單元測試你潛入集成測試(自下而上)之前,你也可以做它周圍的其他方法(上下),但因爲你說你是不是這麼多的經驗我會堅持第一。

最後,開始吧。您將在實際編寫測試代碼時學到最多最快的內容。

2
  • 停止。 「..not familiar with the code..」。首先熟悉代碼,最重要的是它的預期功能。你不能重構或單元測試你不習慣的代碼。
  • 既然你之前沒有做過單元測試,我會建議learning and getting convenient with unit-tests

重要說明:錯誤/錯誤的單元測試比沒有單元測試更糟糕。這是因爲下一個會維護你的代碼的人會誤解 的功能。

1

將測試添加到沒有測試的遺留代碼是一項艱鉅的任務。正如@Suraj所提到的,熟悉代碼庫和預期的功能。如果你不知道它應該做什麼,你就無法測試它。

在選擇要測試的代碼區域方面。從高業務價值領域開始。哪些功能最重要?你想確保你有一個強大的代碼測試集。由於您沒有任何單元/集成測試,我將從一些高級別端到端測試開始,至少確保給定系統的某些輸入以獲得一些預期的輸出。這不能確保正確性,但至少可以確保一致性。

然後當你開發一個測試套件時,你可以確信你正在做的重構不會改變代碼的行爲(除非你發現當然正在修復的錯誤)。

對於測試框架,JUnit是標準的單元測試框架。請注意,框架Mockito和Powermock本身不是測試框架,但它們可以在JUnit中使用。

對於驗收測試,還有各種框架可以提供幫助。對於Web UI測試,Selenium非常標準。還有類似Fitnesse的工具可用於更多表格驅動的測試。

也有一些常見的框架來幫助代碼覆蓋 - Cobertura,Emma,Clover想起來了。

我也會建立一個自動構建(Jenkins構建服務器非常簡單)。這將允許您在每次登記時運行測試。即使你的代碼覆蓋率開始很低,但養成這種習慣是一個好習慣。

相關問題