首頁 > 後端開發 > Golang > 如何編寫模擬對象和存根以進行測試?

如何編寫模擬對象和存根以進行測試?

Johnathan Smith
發布: 2025-03-10 17:38:17
原創
467 人瀏覽過

如何編寫模擬對象和存根以在GO中進行測試?

go沒有像其他語言那樣具有內置的模擬框架(例如,Java的Mockito)。但是,您可以使用接口和結構有效地創建模擬和存根。關鍵是定義代表您代碼相互作用的依賴項的接口。然後,您為您的實際代碼創建具體實現,並分開測試的模擬實現。

讓我們用一個示例說明:想像一下您具有與數據庫交互的函數:

 <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false">  type database database界面ata(id int)(字符串,錯誤){// ...實際數據庫交互...返回數據庫的“數據”;數據,nil}  
登入後複製

現在,讓我們創建一個模擬:

 <pre class="brush:php;toolbar:false"> <code class="“" go> type mockdatabase struct {getDatafunc func(int)(string,error)} func(m *mockdatabase) ,nil //或返回默認值/錯誤} </code> 
登入後複製

在您的測試中,您可以使用 oigddatabase 控制 getdata

 <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre class="brush:php;toolbar:false"> <pre int nil assert.error> 
登入後複製

此示例顯示一個簡單的模擬。存根更簡單;他們通常在模擬函數中返回沒有復雜邏輯的預定值。

在GO單元測試中使用模擬對象的最佳實踐是什麼?

    • 保持模擬較小且專注:每個模擬只能模擬單個依賴的必要行為。避免創建過度複雜的模擬,以模仿過多的功能。
    • 始終如一地使用接口:接口對於有效的模擬至關重要。確保您的代碼通過接口而不是具體類型與依賴關係進行交互。
    • 測試驅動的開發(TDD):寫作測試 鼓勵您以更容易測試的方式設計代碼abase , mockgetData )。
    • 最小化模擬交互:避免過度模擬。如果您發現自己嘲笑許多依賴性層,則可能表明設計缺陷。 Consider refactoring your code for better testability.
    • Use assertion libraries: Libraries like testify/assert make writing assertions in your tests much cleaner and more readable.

    How Can I Effectively Isolate Units of Code During Testing with Mocks in Go?

    Mocks are the primary tool for isolating units of code in Go testing.通過用模擬替換實際依賴關係,您可以消除可能影響您的測試結果的外部因素。這樣可以確保您的測試僅關注正在測試的單元的行為。該測試可以驗證 ProcessData 的行為,而不管數據庫的狀態或可用性如何。這種隔離是編寫可靠且可重複的單元測試的關鍵。

    是否有任何流行的GO庫來簡化用於測試的模擬?

    ,而Go的標準庫無法提供專用的模擬框架,幾個第三方的庫可以簡化該過程:

      創建模擬。它可以根據您的界面自動創建模擬結構和方法,減少樣板代碼。
    • gomock 另一個強大的競爭者, gomock 提供了更強大且靈活的模擬解決方案。它允許更高級的模擬場景,包括期望設置和驗證。但是,它需要更多的設置。

    在這些庫之間進行選擇通常取決於項目的複雜性和偏好。對於更簡單的項目,手動創建模擬可能就足夠了。對於較大的項目或複雜的模擬要求, stidify/mock gomock 可以顯著提高效率並降低樣板。

以上是如何編寫模擬對象和存根以進行測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板