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

Wie kann ich in Go effektiv auf Panik testen?

Susan Sarandon
Freigeben: 2024-12-05 15:19:09
Original
452 Leute haben es durchsucht

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")
}
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

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

Expect(OtherFunctionThatPanics).To(Panic())
Nach dem Login kopieren

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()
}
Nach dem Login kopieren

Diese Funktion kann wie folgt verwendet werden:

func TestPanic(t *testing.T) {
    assertPanic(t, OtherFunctionThatPanics)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage