«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно проверить ситуацию паники в ходе?

Как эффективно проверить ситуацию паники в ходе?

Опубликовано в 2025-04-19
Просматривать:610

How Can I Effectively Test for Panics in Go?

тестирование на панику в Go

При написании тестов в Go, проверка на панику может быть полезной методикой. Однако, в отличие от Java, Go не имеет явного синтаксиса для выборочного обработки паники. defer func () { Если r: = record (); r! = nil { fmt.println ("восстановлен в f", r) } } () Другое функция, что накатана () t.errorf («Код не паниковал») }

Этот код пытается восстановить из любой паники в других функциях, что использует функцию восстановления. Тем не менее, может быть сложно определить, вообще ли функция паниковала или не произошла паника. Это может быть достигнуто путем инвертирования логики и обеспечения того, чтобы паника произошла, если ожидается:

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")
}

дополнительно, более продвинутые структуры тестирования, такие как Ginkgo или Gomega, предоставляют встроенные совпадения для утверждения паники:

ждать (другие функции, что функции). Создайте универсальную функцию для утверждения паники: func assertpanic (t *testing.t, f func ()) { defer func () { Если r: = record (); r == nil { t.errorf («Код не паниковал») } } () f () }

эта функция можно использовать следующим образом:

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

    // Code under test
    OtherFunctionThatPanics()
}
]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3