使用覆蓋資訊測試Go 中的os.Exit 場景(Coveralls.io/Goveralls)
這個問題解決了測試程式的挑戰,在Go 中使用os.Exit(),同時確保準確報告覆蓋資訊。主要問題是現有方法(例如重新呼叫二進位)無法追蹤覆蓋率。
準確覆蓋率的修改方法
為了解決此限制,修改了測試提出了方法。測試不是重新呼叫二進位文件,而是透過修改 os.Exit() 或 log.Fatalf() 函數來捕獲退出程式碼或錯誤日誌來執行測試。
修改的foo/bar.go:
package foo import ( "fmt" "os" ) var osExit = os.Exit func Crasher() { fmt.Println("Going down in flames!") osExit(1) }
修改後的測試程式碼: foo/bar_test.go
修改後的測試程式碼: foo/bar_test.gopackage foo import "testing" func TestCrasher(t *testing.T) { // Save current function and restore at the end: oldOsExit := osExit defer func() { osExit = oldOsExit }() var got int myExit := func(code int) { got = code } osExit = myExit Crasher() if exp := 1; got != exp { t.Errorf("Expected exit code: %d, got: %d", exp, got) } }
這種方法允許覆蓋工具準確追蹤os.Exit() 的執行,並確保用os.Exit() 退出例程的測試案例會覆寫測試結果。
結論修改後的方法有效地結合了測試帶有退出代碼和覆蓋率信息,為準確測試os.Exit() 場景提供完整的解決方案,同時保持準確的覆蓋率報告。以上是如何準確測試 Go 中的 os.Exit() 並保持程式碼覆蓋率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!