在golang测试M recover
此恢复工作:在golang测试M recover,go,Go,此恢复工作: 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 Test
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)
}
为什么??
我希望func TestMain(m*testing.m)
中的代码可以恢复这里的panic
。为什么不呢?在这种情况下,我只有恐慌
,没有任何恢复
完整代码:
package main
import (
"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
命令。这是因为测试是在单独的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)
}