package bg import ( "sync" "testing" ) func TestRunFaengtPanikAuf(t *testing.T) { // Ohne das recover in Run stürbe hier der Testprozess – das ist zugleich // die Aussage des Tests. Run("test", func() { panic("absichtlich") }) } func TestRunLaesstErgebnisDurch(t *testing.T) { gelaufen := false Run("test", func() { gelaufen = true }) if !gelaufen { t.Fatal("fn wurde nicht ausgeführt") } } func TestGoLaeuftUndUeberlebt(t *testing.T) { var wg sync.WaitGroup wg.Add(2) Go("heil", func() { defer wg.Done() }) Go("panisch", func() { defer wg.Done(); panic("absichtlich") }) wg.Wait() } // Eine Schleife, in der ein Durchgang scheitert, muss weiterlaufen – das ist // der Grund, warum es Run neben Go gibt. func TestSchleifeLaeuftNachPanikWeiter(t *testing.T) { durchgaenge := 0 for i := range 5 { Run("schritt", func() { durchgaenge++ if i == 2 { panic("mittendrin") } }) } if durchgaenge != 5 { t.Fatalf("nur %d von 5 Durchgängen", durchgaenge) } }