[short] skip go test -c -o mainpanic.exe ./mainpanic & go test -c -o mainexit0.exe ./mainexit0 & go test -c -o testpanic.exe ./testpanic & go test -c -o testbgpanic.exe ./testbgpanic & wait # Test binaries that panic in TestMain should be marked as failing. ! go test -json ./mainpanic stdout '"Action":"fail"' ! stdout '"Action":"pass"' ! go tool test2json ./mainpanic.exe stdout '"Action":"fail"' ! stdout '"Action":"pass"' # Test binaries that exit with status 0 should be marked as passing. go test -json ./mainexit0 stdout '"Action":"pass"' ! stdout '"Action":"fail"' go tool test2json ./mainexit0.exe stdout '"Action":"pass"' ! stdout '"Action":"fail"' # Test functions that panic should never be marked as passing # (https://golang.org/issue/40132). ! go test -json ./testpanic stdout '"Action":"fail"' ! stdout '"Action":"pass"' ! go tool test2json ./testpanic.exe -test.v stdout '"Action":"fail"' ! stdout '"Action":"pass"' ! go tool test2json ./testpanic.exe stdout '"Action":"fail"' ! stdout '"Action":"pass"' # Tests that panic in a background goroutine should be marked as failing. ! go test -json ./testbgpanic stdout '"Action":"fail"' ! stdout '"Action":"pass"' ! go tool test2json ./testbgpanic.exe -test.v stdout '"Action":"fail"' ! stdout '"Action":"pass"' ! go tool test2json ./testbgpanic.exe stdout '"Action":"fail"' ! stdout '"Action":"pass"' -- go.mod -- module m go 1.14 -- mainpanic/mainpanic_test.go -- package mainpanic_test import "testing" func TestMain(m *testing.M) { panic("haha no") } -- mainexit0/mainexit0_test.go -- package mainexit0_test import ( "fmt" "os" "testing" ) func TestMain(m *testing.M) { fmt.Println("nothing to do") os.Exit(0) } -- testpanic/testpanic_test.go -- package testpanic_test import "testing" func TestPanic(*testing.T) { panic("haha no") } -- testbgpanic/testbgpanic_test.go -- package testbgpanic_test import "testing" func TestPanicInBackground(*testing.T) { c := make(chan struct{}) go func() { panic("haha no") close(c) }() <-c }