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中文網其他相關文章!

Golang更適合高並發任務,而Python在靈活性上更有優勢。 1.Golang通過goroutine和channel高效處理並發。 2.Python依賴threading和asyncio,受GIL影響,但提供多種並發方式。選擇應基於具體需求。

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

selectgolangforhighpperformanceandcorrency,ifealforBackendServicesSandNetwork程序; selectpypypythonforrapiddevelopment,dataScience和machinelearningDuetoitsverserverserverserversator versator anderticality andextility andextentensivelibraries。

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

Golang和Python分別在哪些方面更易用和學習曲線更平緩? Golang更適合高並發和高性能需求,學習曲線對有C語言背景的開發者較平緩。 Python更適合數據科學和快速原型設計,學習曲線對初學者非常平緩。

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

Golang適合快速開發和並發編程,而C 更適合需要極致性能和底層控制的項目。 1)Golang的並發模型通過goroutine和channel簡化並發編程。 2)C 的模板編程提供泛型代碼和性能優化。 3)Golang的垃圾回收方便但可能影響性能,C 的內存管理複雜但控制精細。

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

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

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具