單元測試與整合測試簡述

更新於 發佈於 閱讀時間約 3 分鐘
raw-image

最近在研讀單元測試的藝術這本書,也剛好因為自己對單元測試的撰寫還沒有很游刃有餘XD,但由於我是挑重點看,簡單做個內容讀後感的整理

優秀單元測試的特質

  • 它應該是自動化,且可被重複執行
  • 容易被實現
  • 第二天應該還有存在的意義(指不是臨時性)
  • 任何人都可以按個按鈕就行它(這段我就不明白單元測試為啥會有按鈕??)
  • 它的執行速度應該很快
  • 它的執行結果應該一致
  • 它應該要能完全掌控被測試的單元
  • 它應該是完全被隔離的(獨立於其他測試)
  • 如果它的執行結果是失敗的,應該要能簡單清楚呈現

上述簡單來說,單元測試是把測試單元與其他相依物件或資源隔離開來,以保證單元測試結果的高度穩定,且單元測試應該能夠自動執行,透過利用測試框架或測試工具,可以輕鬆地執行測試套件,減少人工測試的工作量。

何謂整合測試?

根據書本說,整合測試應該覆蓋系統的不同部分,包括不同模組、組件或服務的交互作用,且整合測試會實際使用到真實的相依物件或資源,以確保整個系統的功能正常運作。

整合測試可以確保各個單元在結合後不會產生不明顯的錯誤或相互干擾,而這種測試通常需要較多的資源和時間,因為它涉及多個元件的協同操作。

書本上的案例都是使用.Net 的寫法進行講解,可惜我看不懂,不過以測試替身的作業大致上都差不多,先來簡單說明測試替身。

總結來說,單元測試是針對程式碼中的個別部分進行的小規模測試,用於驗證它們的正確性。整合測試則關注多個元件之間的互動和整合,以確保整體系統的正確性。這兩種測試在軟體開發中都是重要的,並互補,以確保軟體的品質和穩定性。

何為測試替身(test double)?

PHP有一個叫 PHPUnit 測試框架,用於撰寫單元測試和整合測試。使用測試替身( test double )來模擬和替代實際的依賴物件DOC(Depended-on Component),以便更有效地進行單元測試。PHPUnit 提供了幾種不同種類的 test double:

  1. FakeFake Object 是一個簡化版本的依賴物件,通常被用來代替真實的依賴物件,以測試某個組件。例如,您可以使用假的數據庫物件來替代實際的數據庫,以測試代碼的資料存取部分,而不必實際連接到數據庫。
  1. StubStub 是一個簡單的實現,它提供了特定行為或回傳特定值,以模擬依賴物件的行為。這對於測試時需要特定回應的情況很有用。
  2. SpySpy Object 被用來追蹤被測試代碼對依賴物件的調用,以確保特定方法被調用了多少次,或者使用了正確的參數。
  3. MockMock Object 是一種更高級的測試替身,它可以模擬依賴物件的行為,並記錄方法的調用情況。開發人員可以設置模仿物件的期望行為,並驗證這些期望是否得到了滿足。
  4. Dummy Dummy Object 是一個不執行實際操作的替身物件,僅用於滿足方法或函數的參數要求。它們不關心方法的實際行為,只是占位符。
// 範例
$dummyLogger = $this->createMock(Logger::class);


而與PHPUnit 類似的測試工具,則是 Mockery, Mockery 是一個獨立的 PHP 模擬(mocking)庫與PHPUnit 有不同的方式和功能,它專門用於創建測試替身。 Mockery 提供了一種更靈活的方式來創建測試替身,並且通常在 Laravel 項目中與 PHPUnit 結合使用。


下一章將講解PHPUnit與Mockery 使用方式及差異~

PHPUnit 與 Mockery 寫法差異




avatar-img
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
接續上一章Laravel Request 的概念簡單說明,接下來講 Request 特別的應用,而分享這部分的契機,主要是在新人時期面試時被問到的一題,不知道大家是否有被考過這題? 通常考官的問題:解釋一下關於Laravel 隱式綁定 or 是否聽過隱式綁定?
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
根據上一篇部署完畢Laravel 專案後,本章要來幫線上專案設定資料庫,fly.io 部署MySQL免費容量是3GB,在設定的時候要記得設定size,避免超過要收費。 接下來建置mysql 應用程序並創建屬於 mysql volume ,避免數據資料遺失~
第一次學習框架,總是透過本地使用XAMPP or MAMP工具進行開發練習,但為了將自己練習的小專案部署到線上主機DEMO給身邊朋油看,就得需要額外先了解學習GCP or AWS,但一不小心亂搞就會產生額外費用(亂搞結果收費爆掉的過來人...),後來發現好物,那就是fly.io 啦
通常練習開發時,總不知道選擇哪些方便的GUI工具協助簡化工作,新手時期通常都會搭配MAMP or XAMPP本身的 phpmyadmin 使用,雖然沒有不可以,但在職場上通常都是跟著同事們用一樣的版本工具,這邊介紹市面上常見且好用的 MySQL GUI 工具,幫助開發人員減少工作量
學習框架前第一步,先理解框架的生命週期 學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
接續上一章Laravel Request 的概念簡單說明,接下來講 Request 特別的應用,而分享這部分的契機,主要是在新人時期面試時被問到的一題,不知道大家是否有被考過這題? 通常考官的問題:解釋一下關於Laravel 隱式綁定 or 是否聽過隱式綁定?
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
根據上一篇部署完畢Laravel 專案後,本章要來幫線上專案設定資料庫,fly.io 部署MySQL免費容量是3GB,在設定的時候要記得設定size,避免超過要收費。 接下來建置mysql 應用程序並創建屬於 mysql volume ,避免數據資料遺失~
第一次學習框架,總是透過本地使用XAMPP or MAMP工具進行開發練習,但為了將自己練習的小專案部署到線上主機DEMO給身邊朋油看,就得需要額外先了解學習GCP or AWS,但一不小心亂搞就會產生額外費用(亂搞結果收費爆掉的過來人...),後來發現好物,那就是fly.io 啦
通常練習開發時,總不知道選擇哪些方便的GUI工具協助簡化工作,新手時期通常都會搭配MAMP or XAMPP本身的 phpmyadmin 使用,雖然沒有不可以,但在職場上通常都是跟著同事們用一樣的版本工具,這邊介紹市面上常見且好用的 MySQL GUI 工具,幫助開發人員減少工作量
學習框架前第一步,先理解框架的生命週期 學習完PHP程式基礎後,就會開始進入框架的學習,為了能理解Laravel框架是如何運作的,就必須清楚框架的生命週期,這也是面試時的必考題哦。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
測試對於構建複雜的 Vue 應用至關重要,因為它能防止回歸並鼓勵將應用拆分為可測試的模組。我們介紹了測試的基本術語和推薦的工具,包括單元測試、組件測試和端對端測試。建議越早開始測試,避免隨著時間推移而增加的相依性。單元測試專注於函數和邏輯的正確性,而組件測試則驗證 UI 元素的行為與交互。
Thumbnail
單元測試不僅能發現錯誤,更是提升開發技能的關鍵工具。Laravel 提供強大的測試框架,讓我們可以輕鬆撰寫測試。建立測試資料庫、撰寫測試方法、使用 Factory 生成測試資料,能確保程式碼穩定,並幫助開發者在修改與重構中更有信心。持續撰寫測試能提高程式碼品質,並讓開發過程更有條理與安全感。
Thumbnail
今天要實作和體驗的是拼單字的小遊戲,類似小時候在報紙、英文童書、或著電子辭典的小遊戲,一開始都是空白,隨著使用者拼對而逐漸顯示原本的單字樣貌,直到整個單字拼出來為止。 場景: 電腦隨機從單字庫裡面撈一個單字出來。 讓使用者扮演玩家去玩拼單字的遊戲。
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
Thumbnail
A/B 測試是一種用來測試不同版本效果的實驗方法,可以用於網站優化、電子郵件行銷和社群媒體行銷中。瞭解 A/B 測試的五個大小技巧,包括明確的測試目標、控制變因、足夠的樣本數、一次只測試一個變因以及追蹤長期表現。在進行網頁優化時,可以將 A/B 測試應用於不同標題、文案、等元素,找出有效的改進方向。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
我不知道跟我有沒有關係,我剛出社會的時候剛好到一家還算蠻大的網站公司,那個時後公司很多技術很不成熟,所以他們問我我都是怎麽測試網站,總之呢!狗眼看人低,他們以為我只是點開每一個連結檢查網頁,所以他們覺得自己很厲害就開始寫一些只會點開網站的程式,事實上網站測試是一頁一頁全憑經驗預知道客戶是怎樣使用一頁
在希臘文中,試煉和試探是同一個字元πειρασμός,但是它的意義是不一樣的。好的試煉會讓人成長,但是試探可能讓人犯錯。在人生中,會面臨到大大小小的試煉和試探。而現代的社會中,試煉和試探又會以各種不同的形式出現。當對他們的認識越清楚,就越能夠知道如何面對或處理。🌿
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
在企業IT環境,系統和數據的備份的重要性相信是不用解說,亦不用懷疑的。 但很時時候,企業忽略的並不是備份,而是Drill test的重要性。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
測試對於構建複雜的 Vue 應用至關重要,因為它能防止回歸並鼓勵將應用拆分為可測試的模組。我們介紹了測試的基本術語和推薦的工具,包括單元測試、組件測試和端對端測試。建議越早開始測試,避免隨著時間推移而增加的相依性。單元測試專注於函數和邏輯的正確性,而組件測試則驗證 UI 元素的行為與交互。
Thumbnail
單元測試不僅能發現錯誤,更是提升開發技能的關鍵工具。Laravel 提供強大的測試框架,讓我們可以輕鬆撰寫測試。建立測試資料庫、撰寫測試方法、使用 Factory 生成測試資料,能確保程式碼穩定,並幫助開發者在修改與重構中更有信心。持續撰寫測試能提高程式碼品質,並讓開發過程更有條理與安全感。
Thumbnail
今天要實作和體驗的是拼單字的小遊戲,類似小時候在報紙、英文童書、或著電子辭典的小遊戲,一開始都是空白,隨著使用者拼對而逐漸顯示原本的單字樣貌,直到整個單字拼出來為止。 場景: 電腦隨機從單字庫裡面撈一個單字出來。 讓使用者扮演玩家去玩拼單字的遊戲。
Thumbnail
這篇內容,將會講解什麼是腳本函式,以及與腳本函式相關的知識。包括腳本的簡介、使用函式(或全域變數)的注意事項、定義全域變數、定義函式、什麼是宣告、局部變數的應用。
Thumbnail
A/B 測試是一種用來測試不同版本效果的實驗方法,可以用於網站優化、電子郵件行銷和社群媒體行銷中。瞭解 A/B 測試的五個大小技巧,包括明確的測試目標、控制變因、足夠的樣本數、一次只測試一個變因以及追蹤長期表現。在進行網頁優化時,可以將 A/B 測試應用於不同標題、文案、等元素,找出有效的改進方向。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
我不知道跟我有沒有關係,我剛出社會的時候剛好到一家還算蠻大的網站公司,那個時後公司很多技術很不成熟,所以他們問我我都是怎麽測試網站,總之呢!狗眼看人低,他們以為我只是點開每一個連結檢查網頁,所以他們覺得自己很厲害就開始寫一些只會點開網站的程式,事實上網站測試是一頁一頁全憑經驗預知道客戶是怎樣使用一頁
在希臘文中,試煉和試探是同一個字元πειρασμός,但是它的意義是不一樣的。好的試煉會讓人成長,但是試探可能讓人犯錯。在人生中,會面臨到大大小小的試煉和試探。而現代的社會中,試煉和試探又會以各種不同的形式出現。當對他們的認識越清楚,就越能夠知道如何面對或處理。🌿
Thumbnail
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
Thumbnail
在企業IT環境,系統和數據的備份的重要性相信是不用解說,亦不用懷疑的。 但很時時候,企業忽略的並不是備份,而是Drill test的重要性。