Spec-Zone.ru › Go

Пакет slogtest

  • import "testing/slogtest"
  • Обзор
  • Индекс
  • Примеры

Обзор

Пакет slogtest реализует поддержку тестирования реализаций обработчиков log/slog.Handler.

Пример (Разбор)

Этот пример демонстрирует один подход к тестированию обработчика с помощью этого пакета. Обработчик получает [bytes.Buffer] для записи, и каждая строка результирующего вывода анализируется. Для JSON-вывода [encoding/json.Unmarshal] создаёт результат в нужном формате, если получает указатель на map[string]any.

Код:

var buf bytes.Buffer
h := slog.NewJSONHandler(&buf, nil)

results := func() []map[string]any {
    var ms []map[string]any
    for _, line := range bytes.Split(buf.Bytes(), []byte{'\n'}) {
        if len(line) == 0 {
            continue
        }
        var m map[string]any
        if err := json.Unmarshal(line, &m); err != nil {
            panic(err) // In a real test, use t.Fatal.
        }
        ms = append(ms, m)
    }
    return ms
}
err := slogtest.TestHandler(h, results)
if err != nil {
    log.Fatal(err)
}

Индекс

  • func Run(t *testing.T, newHandler func(*testing.T) slog.Handler, result func(*testing.T) map[string]any)
  • func TestHandler(h slog.Handler, results func() []map[string]any) error

Примеры

Пакет (Разбор)

Файлы пакета

slogtest.go

func Run 1.22

func Run(t *testing.T, newHandler func(*testing.T) slog.Handler, result func(*testing.T) map[string]any)

Run применяет slog.Handler к тем же тестовым случаям, что и TestHandler, но выполняет каждый случай в подтесте. Для каждого тестового случая сначала вызывается newHandler для получения экземпляра тестируемого обработчика, затем выполняется тестовый случай, а затем вызывается result для получения результата. Если тестовый случай завершается неудачно, вызывается t.Error.

func TestHandler 1.21

func TestHandler(h slog.Handler, results func() []map[string]any) error

TestHandler тестирует slog.Handler. Если TestHandler обнаруживает какие-либо ошибки, он возвращает ошибку для каждой из них, объединённую в одну ошибку с помощью errors.Join.

TestHandler устанавливает данный Handler в slog.Logger и выполняет несколько вызовов методов вывода Logger. Обработчик должен быть включён для уровней Info и выше.

Функция результатов вызывается после всех таких вызовов. Она должна возвращать срез map[string]any, по одному для каждого вызова метода вывода Logger. Ключи и значения карты должны соответствовать ключам и значениям вывода Handler. Каждая группа в выводе должна быть представлена своей вложенной map[string]any. Следует использовать стандартные ключи slog.TimeKey, slog.LevelKey и slog.MessageKey.

Если Handler выводит JSON, то вызов encoding/json.Unmarshal с `map[string]any` создаст правильную структуру данных.

Если Handler намеренно опускает атрибут, который проверяется тестом, то функция результатов должна проверить его отсутствие и добавить его в возвращаемую карту.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/testing/slogtest/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API