-
Notifications
You must be signed in to change notification settings - Fork 0
/
testing.go
144 lines (115 loc) · 3.76 KB
/
testing.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package zaplogger
import (
"testing"
"go.uber.org/zap"
"go.uber.org/zap/zaptest"
"gopkg.in/gomisc/slog.v1"
)
// Testing - logger соответсвующий logger.Logger и zaptest.TestingT
// интерфейсам. В качестве writer-а использующий testing.T
type Testing struct {
testing.TB
logger *zap.Logger
failed bool
Messages []string
}
// NewTesting - logger для тестов
func NewTesting(t *testing.T, level int) slog.Logger {
log := zaptest.NewLogger(t, zaptest.Level(CountdownLevel(level)))
return &Testing{
TB: t,
logger: log,
}
}
// Logf - реализация logger-a testing.TB
func (z *Testing) Logf(s string, i ...any) {
z.Infof(s, i...)
}
// Fail фэйлит тест
func (z *Testing) Fail() {
z.failed = true
}
// Failed возвращает признак того что тест завершен неуспешно
func (z *Testing) Failed() bool {
return z.failed
}
// FailNow фэйлит тест
func (z *Testing) FailNow() {
z.Fail()
z.TB.FailNow()
}
// Name возвращает имя теста
func (z *Testing) Name() string {
return z.TB.Name()
}
// Info логирует информационное сообщение
func (z *Testing) Info(args ...any) {
msg := getMessage(args...)
z.logger.Info(msg.message, msg.fields...)
}
// Infof логирует информационное сообщение с форматированием
func (z *Testing) Infof(format string, args ...any) {
msg := getMessagef(format, args...)
z.logger.Info(msg.message, msg.fields...)
}
// Error логирует ошибку
func (z *Testing) Error(args ...any) {
msg := getMessage(args...)
z.logger.Error(msg.message, msg.fields...)
}
// Errorf логирует ошибку с форматированным сообщением
func (z *Testing) Errorf(format string, args ...any) {
msg := getMessagef(format, args...)
z.logger.Error(msg.message, msg.fields...)
}
// Fatal логирует ошибку и прерывает работу
func (z *Testing) Fatal(args ...any) {
msg := getMessage(args...)
z.logger.Fatal(msg.message, msg.fields...)
}
// Fatalf логирует ошибку и прерывает работу с форматированным сообщением
func (z *Testing) Fatalf(format string, args ...any) {
msg := getMessagef(format, args...)
z.logger.Fatal(msg.message, msg.fields...)
}
// Warn логирует предупреждение
func (z *Testing) Warn(args ...any) {
msg := getMessage(args...)
z.logger.Warn(msg.message, msg.fields...)
}
// Warnf логирует предупреждение с форматированным сообщением
func (z *Testing) Warnf(format string, args ...any) {
msg := getMessagef(format, args...)
z.logger.Warn(msg.message, msg.fields...)
}
// Panic - логгирует панику
func (z *Testing) Panic(args ...any) {
msg := getMessage(args...)
z.logger.Panic(msg.message, msg.fields...)
}
// Panicf - логгирует панику с форматированным сообщением
func (z *Testing) Panicf(format string, args ...any) {
msg := getMessagef(format, args...)
z.logger.Panic(msg.message, msg.fields...)
}
func (z *Testing) Debug(args ...any) {
msg := getMessage(args...)
z.logger.Debug(msg.message, msg.fields...)
}
func (z *Testing) Debugf(template string, args ...any) {
msg := getMessagef(template, args...)
z.logger.Debug(msg.message, msg.fields...)
}
// With - спавнит логгер с анотацией полями
func (z *Testing) With(args ...any) slog.Logger {
msg := getMessage(args...)
newLog := &Testing{
TB: z.TB,
logger: z.logger.With(msg.fields...),
}
return newLog
}
// Sync - синхронизация логгера
func (z *Testing) Sync() {
_ = z.logger.Sync()
}