更新於 2024/09/03閱讀時間約 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 寫法差異




分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.