在使用logrus时,您如何使用断言库(如using )来断言恐慌?
以下面的代码为例:
var mylogger = logrus.WithContext("MyLogger")
func LoadPreparedStatements() {
db := psql.PsqlClient()
var err error
myPreparedStatement, err = db.Prepare("SELECT * FROM mytable")
if err != nil {
mylogger.Panic("Loading SQL Prepared Statement Failed")
}
}在使用error编写测试时,我只能捕获以下错误:
PanicsWithError(t, "test", func() {
LoadPreparedStatements()
})Panic value: &logrus.Entry{Logger:(*logrus.Logger)(0xc0000ba000), Data:logrus.Fields{"context":"MyLogger"}, Time:time.Date(2022, time.November, 1, 21, 49, 27, 889501622, time.Local), Level:0x0, Caller:(*runtime.Frame)(nil), Message:"Loading SQL Prepared Statement Failed", Buffer:(*bytes.Buffer)(nil), Context:context.Context(nil), err:""}有任何方法来测试返回的消息吗?
发布于 2022-11-02 03:30:07
除了写我自己的测试之外,我找不到任何方法来做这件事。我使用下面的代码来实现一个测试logrus响应的断言。如果所引发的错误不是来自logrus,它可能会有问题,但它允许我编写我想要的断言。
type tHelper interface {
Helper()
}
// didPanic returns true if the function passed to it panics. Otherwise, it returns false.
func didPanic(f assert.PanicTestFunc) (didPanic bool, message interface{}, stack string) {
didPanic = true
defer func() {
message = recover()
if didPanic {
stack = string(debug.Stack())
}
}()
// call the target function
f()
didPanic = false
return
}
func PanicsWithLogrusError(t assert.TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) bool {
if h, ok := t.(tHelper); ok {
h.Helper()
}
funcDidPanic, panicValue, panickedStack := didPanic(f)
if !funcDidPanic {
return assert.Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...)
}
panicErr, ok := panicValue.(*logrus.Entry)
if !ok || panicErr.Message != errString {
return assert.Fail(t, fmt.Sprintf("func %#v should panic with logrus error message:\t%#v\n\tPanic value:\t%#v\n\tPanic stack:\t%s", f, errString, panicErr.Message, panickedStack), msgAndArgs...)
}
return true
} PanicsWithLogrusError(t, "Loading SQL Prepared Statement Failed", func() {
LoadPreparedStatements()
})以上所述使考试通过。
https://stackoverflow.com/questions/74284053
复制相似问题