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.SplitSeq(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. Handler должен быть включён для уровней Info и выше.

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

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

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

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

Spec-Zone.ru

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