為具有超時的單元測試創建一個deadlineExceededError:true
php小編小新在這裡為大家介紹一個有關單元測試的技巧:為帶有超時的單元測試創建一個deadlineExceededError:true。在進行單元測試時,有時可能會遇到測試執行逾時的情況,這時我們可以透過設定deadlineExceededError為true來解決這個問題。這個技巧可以幫助我們更好地控制和管理測驗的執行時間,確保測驗的準確性和可靠性。接下來,我們將詳細介紹如何運用這個技巧來提升單元測試的效率和可靠性。
問題內容
我正在嘗試在我的專案中建立一個單元測試,在其中模擬 http 客戶端並設定客戶端必須返回的回應。 我需要這樣的行為,因為我的程式碼需要做出相應的行為,以防 http 客戶端因超時而失敗:因此我需要模擬 http 客戶端以返回一個 deadlineexceedederror 並從中進行單元測試。
到目前為止,我嘗試的是以 client.do 返回的方式模擬客戶端 do 函數:
getdofunc = func(*http.request) (*http.response, error) { return nil, &url.error{ op: "post", err: context.deadlineexceeded, } }
它可以工作,但不完全,這意味著當我以這種模擬行為執行程式碼時,返回的錯誤類型是:
error(*net/url.error) *{op: "post", url: "", err: error(context.deadlineexceedederror) {}}
這又是正確的,但不完全。為什麼?因為如果我運行程式碼並且發生真正的超時,我會得到更完整的東西:
error(*net/url.Error) *{Op: "Post", URL: "http://localhost:4500/scan/", Err: error(*net/http.httpError) *{err: "context deadline exceeded (Client.Timeout exceeded while awaiting headers)", timeout: true}}
最讓我感興趣的是timeout: true
。如果我設法告訴我的模擬返回它,我可以斷言這一點,我發現這比僅斷言返回的錯誤是 deadlineexceedederror 類型更完整。
解決方法
為了避免測試過於複雜,我建議您採用這種方法。首先,先定義您的錯誤:
type timeouterror struct { err string timeout bool } func (e *timeouterror) error() string { return e.err } func (e *timeouterror) timeout() bool { return e.timeout }
這樣,timeouterror
就同時實作了error()
和timeout
介面。
然後您必須為 http 用戶端定義模擬:
type mockclient struct{} func (m *mockclient) do(req *http.request) (*http.response, error) { return nil, &timeouterror{ err: "context deadline exceeded (client.timeout exceeded while awaiting headers)", timeout: true, } }
這只是傳回上面定義的錯誤和 nil
作為 http.response。最後,讓我們看看如何編寫範例單元測試:
func TestSlowServer(t *testing.T) { r := httptest.NewRequest(http.MethodGet, "http://example.com", nil) client := &mockClient{} _, err := client.Do(r) fmt.Println(err.Error()) }
如果您偵錯此測試並在 err
變數上使用偵錯器暫停,您將看到想要的結果。
透過這種方法,您可以實現所需的功能,而無需帶來任何額外的複雜性。讓我知道是否適合您!
以上是為具有超時的單元測試創建一個deadlineExceededError:true的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

Golang適合快速開發和並發場景,C 適用於需要極致性能和低級控制的場景。 1)Golang通過垃圾回收和並發機制提升性能,適合高並發Web服務開發。 2)C 通過手動內存管理和編譯器優化達到極致性能,適用於嵌入式系統開發。

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。
