一些定義–測試技術9

我認為我即將結束有關測試技術的博客系列,感覺好像已經過去了。 對我來說更清楚的一件事是,測試方法仍處于起步階段,因此是開發人員之間爭執或討論的明確來源,這是一件好事。

我懷疑我們正處于職業發展史上的某個時刻,寫作測試學科才剛剛起步,有一天會成為普通的地方,并作為基礎編程課程的一部分進行教授(1)。 今天的博客提供了本系列以前的博客中使用的術語的摘要。

單元測試
我在本系列博客的第二部分中介紹了單元測試的定義,并給出了Shane Warden的觀點,他在他的《 敏捷開發的藝術》一書中指出,單元測試的運行速度應為“每秒數百”。 邁克爾·費瑟斯(Michael Feathers)在他的《 有效處理舊版代碼》一書中指出,在以下情況下,單元測試不是單元測試:

  1. 它與數據庫對話。
  2. 它通過網絡進行通信。
  3. 它涉及文件系統。
  4. 您必須對環境做一些特殊的事情(例如編輯配置文件)才能運行它。

我還引用了Roy Osherove的話,他在他的《單元測試的藝術》一書中一個很好的單元測試總結為:“自動代碼段調用被測試的方法或類,然后檢查關于該方法或方法的邏輯行為的一些假設。類。 單元測試幾乎總是使用單元測試框架編寫的。 它可以輕松編寫并快速運行。 它是完全自動化,值得信賴,可讀性和可維護性的。”

單元測試可以使用來概括FIRST縮寫:快速,獨立的,可重復的,自我確認和及時的。

何時使用單元測試
單元測試是測試的基礎。 如果您使用的是測試驅動開發(TDD),則在編寫生產代碼之前要編寫失敗的測試。 如果您不使用TDD,則至少要在生產代碼的同時編寫測試,即編寫方法,然后編寫其測試。 該技術不涉及TDD附帶的范式轉換,但它比編寫所有代碼后編寫測試要好得多,通常開發人員認為這很乏味。 每個場景都應該有一個測試,將其翻譯成簡明的英語意味著您代碼的每條路徑:每個if語句的兩端和switch語句的每種情況。 簡而言之,每個項目都應具有數百個單元測試,并且您應該確信,如果更改部分代碼,則不會破壞某些內容。

存根
存根用于將被測對象與系統其余部分隔離。 它們是被注入到您的對象中以在測試情況下替換實際對象的對象。 馬丁·福勒(Martin Fowler)在他的論文《莫克斯不是存根》中將存根定義為:

“存根提供對測試過程中進行的呼叫的固定答復,通常通常根本不響應測試中編程的內容。 存根還可以記錄有關呼叫的信息,例如電子郵件網關存根,它可以記住“已發送”的消息,或者僅記住“已發送”的消息數量。”

…從單元測試的藝術中得出的類似定義是:

“存根是系統中現有依賴項(或協作者 )的可控替代。 通過使用存根,您可以測試代碼而無需直接使用依賴項。”

cks
模擬是用于模仿或模擬生產對象的行為或角色的替換對象。 這實際上意味著檢查被測對象是否按預期調用了模擬對象上的方法,如果沒有,則測試失敗。 因此,您是在斷言方法調用的正確性和通過代碼的執行路徑,而不是在常規單元測試的情況下斷言被測試方法的返回值。

整合測試
集成測試與單元測試相反。 集成測試背后的想法是證明您的對象相互協作以及圍繞它們的系統。 套用邁克爾羽毛,集成測試

  1. 與數據庫對話。
  2. 通過網絡進行通信。
  3. 觸摸文件系統。
  4. 要求您對環境做一些特殊的事情(例如編輯配置文件)以運行它。

單元測試領域的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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374295.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度谷歌面試題目

全新整理:微軟、谷歌、百度等公司經典面試100題[第101-160題] 整理:July、二零一一年三月九日。應網友承諾與要求,全新整理。轉載,請注明出處。博主說明:此100題V0.2版,本人不再保證,還會提供答案。-------…

C學習雜記(三)筆試題:字符串大小寫字母切換

字符串大小寫轉換&#xff0c;大寫轉小寫&#xff0c; 小寫轉大寫 #include <stdio.h> #include <string.h>int tramsform(char str[]) {int i 0;int strLen strlen(str);for(i 0; i < strLen; i){if( (str[i] > A) && (str[i] < Z) ){str[i]…

m.2接口和nvme區別_NVMe/SATA SSD有啥不一樣?萌新怎么選

隨著NAND技術的升級迭代&#xff0c;堆棧層數不斷提高使得SSD單位容量成本不斷下降&#xff0c;消費級市場基本已經成為了SSD的天下。目前主流的SSD大致有兩種接口&#xff0c;分別是M.2和SATA兩種類型。NVMe/SATA有啥區別SATA接口的SSD執行的AHCI協議標準&#xff0c;是目前較…

javascript 高級特性探討A4-A5(call和原型.對象復制)

在js中&#xff0c;call和apply是二個神奇的方法&#xff0c;但同時也是容易令人迷惑的二個方法&#xff0c;call和apply的功能是以不同的對象作為上下文來調用某個函數的&#xff0c;簡而言之&#xff0c;就是允許一個對象去調用另一個對象的成員函數&#xff0c;咋一看似乎很…

帶有NetBeans 7.1 RC 2的WebLogic 12c快速入門

WebLogic服務器12c停運了幾天。 它是針對“裸露”的Java開發人員的–花哨的Fusion Middleware東西將繼續沿線升至12c。 因此&#xff0c;這基本上是我要運行的版本。 今天&#xff0c;我為您提供了一個最新的NetBeans 7.1&#xff08;RC 2&#xff09;和WebLogic的快速入門 &am…

C學習雜記(四)sizeof計算聯合體大小

#include <stdio.h>union u1 {char a[13];int b; };int main(void) {printf("%d\n", sizeof(u1));return 0; } 結果為16。 聯合體的大小取決于它所有的成員中占用空間最大的一個成員的大小。u2最大的空間是char[13]&#xff0c;但是因為另一個成員int b的存在…

python爬蟲反爬機制_Python Scrapy突破反爬蟲機制(項目實踐)

對于 BOSS 直聘這種網站&#xff0c;當程序請求網頁后&#xff0c;服務器響應內容包含了整個頁面的 HTML 源代碼&#xff0c;這樣就可以使用爬蟲來爬取數據。但有些網站做了一些“反爬蟲”處理&#xff0c;其網頁內容不是靜態的&#xff0c;而是使用 JavaScript 動態加載的&…

樹的算法 已知二叉樹的前序序列和中序序列求解樹

題目: 已知二叉樹的前序序列和中序序列求解樹 比如 6 4    8 3  5   7 前序序列為6,4,3,5,8,7 中序序列為3,4,5,6,7,8 思路: 前序遍歷序列的第一個元素必為根節點 則中序遍歷序列中&#xff0c;該節點之前的為左子樹&#xff0c;該節點之后的為右子樹&#xff0c;若該節…

使用Spring配置LogBack日志記錄

LogBack是由Log4j的同一作者創建的用于記錄日志的API&#xff08;較新的實現&#xff0c;它類似于新版本&#xff09;&#xff0c;在本文中&#xff0c;我將展示如何在Spring項目中對其進行集成和使用。 在本教程中&#xff0c;我假設您正在使用一個簡單的Spring ROO項目&…

自定義URL Scheme完全指南

iPhone / iOS SDK 最酷的特性之一就是應用將其自身”綁定”到一個自定義 URL scheme 上&#xff0c;該 scheme 用于從瀏覽器或其他應用中啟動本應用。 注冊自定義 URL Scheme 注冊自定義 URL Scheme 的第一步是創建 URL Scheme — 在 Xcode Project Navigator 中找到并點擊工程…

C學習雜記(五)形參實參筆試題

大意失荊州 不要以為簡單就輕視&#xff0c;謹慎&#xff0c;細節&#xff0c;基礎。 一、有以下程序 #include <stdio.h>typedef struct {int b, p;} A;void f(A c) {c.b 1; c.p 2; }void main(void) {A a {1, 2};f(a);printf("%d, %d\n", a.b, a.p); } …

avframe轉byte數組_C# amp; VB6.0 圖像與二維數組 互轉

背景最近在研究C#進行圖像處理&#xff0c;在圖像處理中算法中&#xff0c;往往都是針對的是矩陣運算的。矩陣其實就是一個二維的數組。為了圖像處理的速度&#xff0c;我們都需要放在內存中處理。但網絡上收集的代碼&#xff0c;往往都是以一維數組的樣子提供結果&#xff0c;…

C學習雜記(六)%2.0f打印輸出寬度

%m.nf&#xff0c;m表示整個浮點數的輸出寬度&#xff0c;n表示小數輸出寬度。 1、printf("%f\n", 12.34); 輸出為12.340000。 2、printf("%2.0f\n", 12.34); 輸出為12。 3、printf("%2.1f\n", 12.34); 輸出為12.3。 4、printf(&qu…

P6 音頻格式—— AAC

目錄 前言 01 AAC是什么&#xff1f; 02 為什么需要進行AAC進行音頻壓縮處理&#xff1f; 03 AAC的特點以及優勢 04 AAC格式詳解&#xff1a; 4.1. ADIF的數據結構&#xff1a; 4.1.1 ADIF Header具體的表格: 4.2. ADTS的結構&#xff08;重點&#xff09;&#xff1a; …

Android開發筆記——ListView模塊、緩存及性能

ListView是Android開發中最常用的組件之一。本文將重點說明如何正確使用ListView&#xff0c;以及使用過程中可能遇到的問題。 ListView開發模塊圖片緩存可能遇到的問題一、ListView開發模塊 從項目實踐的角度來看&#xff0c;ListView適合“自底向上”的開發模式&#xff0c;即…

python實現excel篩選功能并輸出_python如何實現excel按顏色篩選功能

離島 2020-07-09 09:37 已采納 不太了解具體需求&#xff0c;提供一些示例代碼和思路供你參考&#xff1a; 整體思路&#xff1a;首先已知excel中的顏色值&#xff0c;根據編碼實現顏色篩選的功能 示例&#xff1a; 1、首先安裝pip install openpyxl 2、示例代碼可以獲取Excel中…

什么是CDI,它與@EJB和Spring有什么關系?

簡要概述了Java EE中的依賴項注入&#xff0c; Resource / EJB和Inject之間的區別以及它們與Spring的關系-主要是鏈接形式。 上下文依賴注入&#xff08;CDI&#xff0c; JSR 299 &#xff09;是Java EE 6 Web Profile的一部分&#xff0c;它本身基于Java依賴注入&#xff08;…

C學習雜記(七)extern聲明可省略變量類型

工作三年&#xff0c;看C的書也不少。第一次知道extern可以省略變量類型。 b.c有一個全局變量unsigned int data_length&#xff0c;a.c想要調用它&#xff0c;通常使用: extern unsigned int data_length&#xff1b; 在聲明時可以把外部變量類型去掉&#xff1a;extern da…

KMP模板

1 ///KMP模板2 ///生成next數組3 void get_next()4 {5 int i0,j-1;6 next[0]-1;7 while (s1[i])8 {9 if (j-1||s1[i]s1[j]) 10 { 11 i; 12 j; 13 next[i]j; 14 } 15 else jnext[j]; 16 …

使用Apache CXF進行Web服務學習

在我的最后幾個項目中&#xff0c;我使用了Web服務&#xff0c;在某些地方創建它們并在其他地方使用它們。 我覺得創建客戶端&#xff0c;創建Web服務等標準任務非常簡單&#xff0c;如果遇到問題&#xff0c;有足夠的資源。 但是對于Web服務&#xff0c;這是一項瑣碎的任務&am…