自動化測試和可執行的規格只能在具有可測試架構的軟體上運作。可測試的架構可實現快速且可靠的測試,這些測試易於編寫、執行和維護。

快速回饋

快速測試使開發人員能夠頻繁地執行它們,以在他們正在建置的內容上獲得快速回饋,而不會失去焦點或流程。

可測試性

在設計可測試性時,請確保您的產品和服務由鬆散耦合、良好封裝的元件或模組組成。

將您的業務邏輯與基礎結構(通常是緩慢且脆弱的元件)分離,可以讓您在不同的層級進行測試,並獲得最大的信心和最低的成本。

  • 確保您可以執行測試而無需透過使用者介面 (UI)。它們速度慢、脆弱、昂貴且難以修復。不要僅依賴 UI 測試。
  • 針對資料庫執行測試會使測試變慢。我們需要確保資料庫在每次測試之前都處於預期的狀態,以使測試行為一致。這將確保測試不會互相干擾,並且可以按任何順序執行。

我們希望我們的大多數測試都使用某種記憶體內存根實作,而不是實際的資料庫。從網域邏輯的角度來看,行為看起來完全相同。為了確保存根以與真實事物相同的方式運作,我們需要有信心,這可以使用合約測試來獲得。

連接埠和轉接器

我們可以將我們的資料庫和我們的存根視為可以插入連接埠的兩件事。包含業務邏輯的應用程式不需要知道它是與存根還是實際資料庫交談。這是因為它正在與這個連接埠交談並儲存和擷取資料。我們可以同時使用存根和真實實作來執行測試。這讓我們有信心存根的行為與真實事物類似。

業務邏輯位於應用程式的核心,與外部裝置和服務完全分離。它不了解資料庫、訊息佇列或 Web 服務,因為我們已透過這些連接埠將它們隔離。通常,這些連接埠會連接到與真實實作互動的轉接器。資料庫會有一個轉接器、佇列會有一個轉接器,以及 Web 服務會有一個轉接器。使用者介面定義我們如何與系統互動。它也會有一個轉接器,例如插入連接埠以在瀏覽器中顯示 UI 的 Web 伺服器。所有 IO 傾向於在這些連接埠之外發生。透過連接埠直接測試核心業務邏輯,我們可以消除許多緩慢且脆弱的 IO。

此架構模式稱為連接埠和轉接器模式(或六邊形架構)。它使您能夠在較低的層級連接您的情境和單元測試,而合約測試則讓您有信心這樣做。

完整堆疊

您會想要執行一些貫穿整個堆疊深度的測試,以獲得完全的信心。診斷完整堆疊、端對端測試中的問題所在非常困難,因為它可能在任何地方。這些測試很脆弱,因為一個變更可能會中斷所有這些測試。它們也很慢,因為在透過瀏覽器、Web 服務或資料庫時會涉及 IO。

測試金字塔

專注於擁有不同種類的測試:大量的單元測試、一些不經過所有重型基礎結構元件的測試,以及少數經過 UI 的測試。這稱為測試金字塔

更多資訊

如需如何實作快速測試的範例 (在 node.js 中),請參閱GitHub 上的 subsecondtdd

或者看看 Aslak 在Devlin 2017 的演講,或關於這個主題的投影片

您可以幫助我們改進此文件。編輯此頁面