此恢复工作:func TestSomeTest(t *testing.T) { defer func() { r := recover() fmt.Println("recovery") fmt.Println(r) }() panic("panic here")}但这不会:func TestSomeTest(t *testing.T) { panic("panic here")}func TestMain(m *testing.M) { defer func() { r := recover() fmt.Println("recovery") fmt.Println(r) }() ret := m.Run() os.Exit(ret)}为什么?我希望这panic here将通过func TestMain(m *testing.M). 为什么不?在这种情况下,我panic没有任何recovery。完整代码:package mainimport ( "fmt" "os" "testing")func TestSomeTest(t *testing.T) { // defer func() { // r := recover() // fmt.Println("recovery") // fmt.Println(r) // }() panic("panic here")}func TestMain(m *testing.M) { defer func() { r := recover() fmt.Println("recovery") fmt.Println(r) }() ret := m.Run() os.Exit(ret)}要运行此代码,我使用了go test命令。
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
这是因为测试是在单独的 goroutine 中运行的。
就像你的第一个例子发送了一个无法恢复的 goroutine。
func TestSomeTest(t *testing.T) {
defer func() {
r := recover()
fmt.Println("recovery")
fmt.Println(r)
}()
go func() {
// won't recover
panic("panic here")
}()
time.Sleep(time.Second)
}
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报
0/150
提交
取消