使用覆盖信息测试 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
package 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中文网其他相关文章!