這個問題討論了使用Go 中測試os.Exit 場景的局限性重新呼叫二進位檔案並檢查退出值的方法。雖然此方法對於測試 os.Exit() 呼叫非常有效,但在使用 coveralls.io 和 Goveralls 等工具進行覆蓋率測試時卻帶來了挑戰。
主要問題源自於重新呼叫的二進位檔案確實會執行以下操作:不使用 -cover 標誌運行,這是收集覆蓋率資訊所必需的。因此,覆蓋率測試工具無法辨識呼叫 os.Exit() 的測試函數 Crasher() 已被執行。
為了解決這個問題,建議的解決方案包括將程式碼重構為使 os.Exit 或 log.Fatalf 函數可替換。透過保存原始函數並在測試後恢復它,測試程式碼可以攔截這些函數並在受控條件下執行它們。
在提供的範例中,定義了一個自訂 myExit 函數來取代 os.Exit 和自訂 myFatalf 函數來取代 log.Fatalf。在測試中,將執行這些函數並捕獲它們的參數。這允許測試驗證正確的退出程式碼或日誌訊息,確保測試的函數確實按預期執行。
遵循此方法,可以獲得測試函數的完整覆蓋,甚至當涉及呼叫 os.Exit() 或 log.Fatalf() 時。這使開發人員能夠徹底測試他們的程式碼,並確保 coveralls.io 和 Goveralls 等工具報告的覆蓋率資訊準確且完整。
以上是如何使用 os.Exit() 和 Coveralls 實現 Go 函數的完整測試覆蓋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!