Heim >Backend-Entwicklung >Golang >Wie kann ich in Go effektiv auf Panik testen?

Wie kann ich in Go effektiv auf Panik testen?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 15:19:09443Durchsuche

How Can I Effectively Test for Panics in Go?

Testen auf Panik in Go

Beim Schreiben von Tests in Go kann die Prüfung auf Panik eine nützliche Technik sein. Im Gegensatz zu Java verfügt Go jedoch nicht über eine explizite Syntax zur selektiven Behandlung von Paniken.

Betrachten Sie das folgende Beispiel:

func f(t *testing.T) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
        }
    }()
    OtherFunctionThatPanics()
    t.Errorf("The code did not panic")
}

Dieser Code versucht, mithilfe der Wiederherstellungsfunktion eine Panik in OtherFunctionThatPanics zu beheben . Es kann jedoch schwierig sein, festzustellen, ob die Funktion überhaupt in Panik geraten ist oder ob keine Panik aufgetreten ist.

Lösung

Der empfohlene Ansatz besteht darin, sich auf das Testen auf Abwesenheit zu konzentrieren einer Panik. Dies kann erreicht werden, indem die Logik umgekehrt wird und sichergestellt wird, dass eine Panik auftritt, wenn sie erwartet wird:

func TestPanic(t *testing.T) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()

    // Code under test
    OtherFunctionThatPanics()
}

Darüber hinaus bieten fortgeschrittenere Test-Frameworks wie Ginkgo oder Gomega integrierte Matcher zur Feststellung des Auftretens von Paniken:

Expect(OtherFunctionThatPanics).To(Panic())

Hilfsfunktionen

Der Einfachheit halber können Sie erstellen eine generische Funktion zur Geltendmachung von Panik:

func assertPanic(t *testing.T, f func()) {
    defer func() {
        if r := recover(); r == nil {
            t.Errorf("The code did not panic")
        }
    }()
    f()
}

Diese Funktion kann wie folgt verwendet werden:

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}

Das obige ist der detaillierte Inhalt vonWie kann ich in Go effektiv auf Panik testen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn