簡體   English   中英

從零開始對未經測試的代碼執行單元和集成測試的方法

[英]Approach to perform unit and integration tests from Scratch for untested code

一個基本的問題是“ 一個人應該如何從一個未經測試的項目開始編寫單元和進行集成測試?特別是考慮到人們對該代碼不熟悉並且之前沒有進行過集成測試的事實。

考慮必須為項目編寫單元測試和集成測試的場景。 使用Java / J2EE技術​​的項目根本沒有編寫任何測試。

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

我還必須估計測試的代碼覆蓋率。 然后執行集成測試。 我將不得不研究集成測試工具並選擇其中一種。 之前我沒有做過任何集成測試或估計的項目代碼接受水平。

由於我是獨立工作,因此如果我有一些策略,技巧,建議以及應該推薦的工具,我將不勝感激。

先到先得:

  1. 了解架構,主要成分是什么?
  2. 如果您對該程序提供的功能沒有很好的了解,請列出它們並創建它們的層次結構
  3. 熟悉代碼后,我建議采用以下方法:
    • 在了解了其不同組件的代碼從何處開始之后,請嘗試弄清楚方法調用的層次結構(在Eclipse中,您可以通過按F3輕松跳轉源代碼定義)
    • 稍后,您可以在調試代碼時執行相同的操作,這樣它將自動跳至定義,此外您還可以觀察程序狀態的變化

對於單元測試本身,我可以向初學者推薦清潔代碼第9章(約12頁 )。 它使用JUnit作為示例,並且很好地介紹了如何進行良好的測試。

在這里,您將學習諸如FIRST原則之類的東西,即單元測試應為:

快速,獨立,可重復,自我驗證且及時

需要澄清的是,JUnit是最常用和公認的測試框架本身。 Mockito和Powermock是模擬框架,當您要進行集成測試時,它們與JUnit一起使用。

對於代碼覆蓋率,我只能推薦Cobertura ,但還有更多內容

科貝圖拉

從單元測試開始,然后再進行集成測試(自下而上),也可以采用其他方法(自下而上),但是由於您說的沒有那么多經驗,我將堅持第一個。

最后,就去開始吧。 在實際編寫測試代碼時,您將學到最多,最快的東西。

  • 停止。 ..not familiar with the code.. 首先熟悉代碼,最重要的是熟悉其預期功能。 您不能重構或單元測試您不滿意的代碼。
  • 由於您之前沒有進行過單元測試,因此建議您學習並方便使用單元測試

重要提示:錯誤/錯誤的單元測試比沒有單元測試更糟糕。 這是因為下一個將維護您的代碼的人將誤解該功能。

向沒有測試的舊代碼中添加測試是一項艱巨的任務。 正如@Suraj所提到的,熟悉代碼庫和預期的功能。 如果您不知道它應該做什么,就無法測試它。

在選擇要測試的代碼區域方面。 從高商業價值領域開始。 哪個功能最重要? 您想確保您對該代碼有一個強大的測試集。

由於您沒有任何單元/集成測試,因此我將從一些高級的端到端測試開始,這些測試至少可以確保在給系統一些輸入的情況下,您可以獲得預期的輸出。 這不能確保正確性,但至少可以確保一致性。

然后,在開發測試套件時,您可以確信正在執行的重構不會改變代碼的行為(除非您發現了已修復的錯誤)。

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

對於驗收測試,還有各種框架可以提供幫助。 對於Web UI測試,Selenium是非常標准的。 還有諸如Fitnesse之類的工具,可以進行更多的表驅動測試。

還有一些通用框架可幫助覆蓋代碼-我想到了Cobertura,Emma和Clover。

我還將設置一個自動構建(Jenkins構建服務器的安裝非常簡單)。 這將允許您在每個簽入中運行測試。 即使您的代碼覆蓋范圍開始時很少,但養成這種習慣也是一個好習慣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM