單元測試與整合測試簡述

更新於 發佈於 閱讀時間約 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
留言分享你的想法!
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
大家好!我們都知道,程式碼寫出來不代表就完工了,還要確保它真的“做到”我們想要的。這就是測試的力量!尤其是在 Web 開發中,測試確保我們的應用正確、穩定且高效地運行。今天,我們就來探討如何在 Gin 應用中進行測試和單元測試。
Thumbnail
大家好!我們都知道,程式碼寫出來不代表就完工了,還要確保它真的“做到”我們想要的。這就是測試的力量!尤其是在 Web 開發中,測試確保我們的應用正確、穩定且高效地運行。今天,我們就來探討如何在 Gin 應用中進行測試和單元測試。
Thumbnail
在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。
Thumbnail
在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。
Thumbnail
使用顯性等待,以及讓我們的自動化網頁看起來有像測試的樣子 另外,readmoo電子書真的很方便啊
Thumbnail
使用顯性等待,以及讓我們的自動化網頁看起來有像測試的樣子 另外,readmoo電子書真的很方便啊
Thumbnail
在 React 測試生態系統中,React Testing Library 成為了方便好用的選擇,因其強調測試應該關注於使用者的操作與觀察元件行為,而不是測試細節實現。
Thumbnail
在 React 測試生態系統中,React Testing Library 成為了方便好用的選擇,因其強調測試應該關注於使用者的操作與觀察元件行為,而不是測試細節實現。
Thumbnail
相信有在開發Web應用的朋友應該對於Postman這套工具相當熟悉, 這套工具可以協助我們在產品尚未完成之前可以先進行一些基本的介接測試,甚至我們可以使用Postman去呼叫雲端的API,像是Google的語音辨識、文字翻譯、字典查詢…,這類大廠相信也都開放許多標準API(Application P
Thumbnail
相信有在開發Web應用的朋友應該對於Postman這套工具相當熟悉, 這套工具可以協助我們在產品尚未完成之前可以先進行一些基本的介接測試,甚至我們可以使用Postman去呼叫雲端的API,像是Google的語音辨識、文字翻譯、字典查詢…,這類大廠相信也都開放許多標準API(Application P
Thumbnail
本筆記會以簡單的例子說明,如何在Laravel中進行unit test 與 feature test。 phpunit.xml則是設定檔,可以設定哪些檔案要做測試,哪些要排除在外等等。 使用命令建立新的test case: 建立feature test: 建立unit test: 執行測試:
Thumbnail
本筆記會以簡單的例子說明,如何在Laravel中進行unit test 與 feature test。 phpunit.xml則是設定檔,可以設定哪些檔案要做測試,哪些要排除在外等等。 使用命令建立新的test case: 建立feature test: 建立unit test: 執行測試:
Thumbnail
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
Thumbnail
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
幾年前,偶然的在某社群聽見 Robot Framework 這套開源框架,起初抱持著好奇的心情簡單的玩了一下,不過當時完全不理解,用這種 Keyword 方式去撰寫自動化測試的好處在哪? ( 不過就是…我知識不足罷了XD ) 。 接下來,我就可以跑測試拉~! 接著看 log.html:
Thumbnail
幾年前,偶然的在某社群聽見 Robot Framework 這套開源框架,起初抱持著好奇的心情簡單的玩了一下,不過當時完全不理解,用這種 Keyword 方式去撰寫自動化測試的好處在哪? ( 不過就是…我知識不足罷了XD ) 。 接下來,我就可以跑測試拉~! 接著看 log.html:
Thumbnail
什麼是Pytest? Pytest是一款強大的Python測試工具,支援平行化測試,使用上簡單方便,適合用在各種不同類型的軟體架構,也適用於RD、QA或獨立測試小組,也適合正要導入TDD的公司。 來寫測試吧! 先用pip安裝pytest: libs\module.py 參考資料:
Thumbnail
什麼是Pytest? Pytest是一款強大的Python測試工具,支援平行化測試,使用上簡單方便,適合用在各種不同類型的軟體架構,也適用於RD、QA或獨立測試小組,也適合正要導入TDD的公司。 來寫測試吧! 先用pip安裝pytest: libs\module.py 參考資料:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News