我懷疑我們正處于職業發展史上的某個時刻,寫作測試學科才剛剛起步,有一天會成為普通的地方,并作為基礎編程課程的一部分進行教授(1)。 今天的博客提供了本系列以前的博客中使用的術語的摘要。
單元測試
我在本系列博客的第二部分中介紹了單元測試的定義,并給出了Shane Warden的觀點,他在他的《 敏捷開發的藝術》一書中指出,單元測試的運行速度應為“每秒數百”。 邁克爾·費瑟斯(Michael Feathers)在他的《 有效處理舊版代碼》一書中指出,在以下情況下,單元測試不是單元測試:
- 它與數據庫對話。
- 它通過網絡進行通信。
- 它涉及文件系統。
- 您必須對環境做一些特殊的事情(例如編輯配置文件)才能運行它。
我還引用了Roy Osherove的話,他在他的《單元測試的藝術》一書中將一個很好的單元測試總結為:“自動代碼段調用被測試的方法或類,然后檢查關于該方法或方法的邏輯行為的一些假設。類。 單元測試幾乎總是使用單元測試框架編寫的。 它可以輕松編寫并快速運行。 它是完全自動化,值得信賴,可讀性和可維護性的。”
單元測試可以使用來概括FIRST縮寫:快速,獨立的,可重復的,自我確認和及時的。
何時使用單元測試
單元測試是測試的基礎。 如果您使用的是測試驅動開發(TDD),則在編寫生產代碼之前要編寫失敗的測試。 如果您不使用TDD,則至少要在生產代碼的同時編寫測試,即編寫方法,然后編寫其測試。 該技術不涉及TDD附帶的范式轉換,但它比編寫所有代碼后編寫測試要好得多,通常開發人員認為這很乏味。 每個場景都應該有一個測試,將其翻譯成簡明的英語意味著您代碼的每條路徑:每個if語句的兩端和switch語句的每種情況。 簡而言之,每個項目都應具有數百個單元測試,并且您應該確信,如果更改部分代碼,則不會破壞某些內容。
存根
存根用于將被測對象與系統其余部分隔離。 它們是被注入到您的對象中以在測試情況下替換實際對象的對象。 馬丁·福勒(Martin Fowler)在他的論文《莫克斯不是存根》中將存根定義為:
“存根提供對測試過程中進行的呼叫的固定答復,通常通常根本不響應測試中編程的內容。 存根還可以記錄有關呼叫的信息,例如電子郵件網關存根,它可以記住“已發送”的消息,或者僅記住“已發送”的消息數量。”
…從單元測試的藝術中得出的類似定義是:
“存根是系統中現有依賴項(或協作者 )的可控替代。 通過使用存根,您可以測試代碼而無需直接使用依賴項。”
cks
模擬是用于模仿或模擬生產對象的行為或角色的替換對象。 這實際上意味著檢查被測對象是否按預期調用了模擬對象上的方法,如果沒有,則測試失敗。 因此,您是在斷言方法調用的正確性和通過代碼的執行路徑,而不是在常規單元測試的情況下斷言被測試方法的返回值。
整合測試
集成測試與單元測試相反。 集成測試背后的想法是證明您的對象相互協作以及圍繞它們的系統。 套用邁克爾羽毛,集成測試 :
- 與數據庫對話。
- 通過網絡進行通信。
- 觸摸文件系統。
- 要求您對環境做一些特殊的事情(例如編輯配置文件)以運行它。
單元測試領域的Roy Osherove指出,“集成測試意味著將兩個或更多或更多依賴軟件模塊作為一個組一起測試”。 對我而言,這畢竟使定義受到了太多限制,在測試單個模塊中的對象時,您可以訪問數據庫或文件系統,同時確定對象是否可以協作。
在我之前從事的項目中,通常會有一個專門編寫用于集成測試的模塊。 這是因為集成測試的數量少于單元測試(可能以1:10的比率),并且由于它們訪問環境的事實通常要慢得多,因此將所有集成測試合并到自己的Maven模塊中意味著他們不必在每次構建模塊時都運行,從而加快了構建和開發時間。
端到端集成測試
我已經在本系列的第二篇博客中詳細介紹了端到端測試,因此總而言之,可以將它們定義為集成測試的一種特殊情況,因為該測試始于系統邊界或剛好位于系統邊界之后,并通過系統的所有層。 系統邊界或系統邊界后面是一個有爭議的問題。 對于Spring MVC應用而言,沒有理由不應該從控制器代碼開始進行端到端測試,而忽略瀏覽器和調度程序servlet。 畢竟,我懷疑Spring的家伙已經徹底測試了他們的代碼,那么為什么還要浪費時間測試它呢? 另外,測試前端看起來像是一整個魚缸。
(1)我經常懷疑測試技術實際上并沒有在拼貼畫和大學中教授,但是我沒有任何證據。 如果有任何學者可以告訴我,單元測試是受教,受鼓勵的,并且是計算機科學學位課程的組成部分,那么我很高興聽到他們的來信。
參考:“ 一些定義–測試技術9”(來自Captain Debug's Blog的 JCG合作伙伴 Roger Hughes)。
相關文章 :
- 測試技巧–不編寫測試
- 端到端測試的濫用–測試技術2
- 您應該對什么進行單元測試? –測試技術3
- 常規單元測試和存根–測??試技術4
- 使用模擬的單元測試–測試技術5
- 為舊版代碼創建存根–測試技術6
- 有關為舊版代碼創建存根的更多信息–測試技術7
- 為什么要編寫單元測試–測試技巧8
翻譯自: https://www.javacodegeeks.com/2011/12/some-definitions-testing-techniques-9.html