slogtest

package
v1.21.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2023 License: MIT Imports: 1 Imported by: 0

Documentation

Overview

slogtestパッケージは、log/slog.Handlerの実装をテストするためのサポートを提供します。

Example (Parsing)

この例は、このパッケージを使用してハンドラをテストする一つの手法を示しています。 ハンドラには bytes.Buffer が書き込み用に与えられ、結果の出力の各行が解析されます。 JSON出力の場合、encoding/json.Unmarshal はmap[string]anyへのポインタを与えると、 望ましい形式の結果を生成します。

package main

import (
	"github.com/shogo82148/std/bytes"
	"github.com/shogo82148/std/encoding/json"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/log/slog"
	"github.com/shogo82148/std/testing/slogtest"
)

func main() {
	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) // 実際のテストでは、t.Fatalを使用します。
			}
			ms = append(ms, m)
		}
		return ms
	}
	err := slogtest.TestHandler(h, results)
	if err != nil {
		log.Fatal(err)
	}

}
Output:

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func TestHandler

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

TestHandlerは、slog.Handler をテストします。 もしTestHandlerが何かしらの不適切な動作を見つけた場合、それら全てを報告するエラーを返します。 これらはerrors.Joinを使用して単一のエラーに結合されます。

TestHandlerは、指定されたHandlerを slog.Logger にインストールし、 Loggerの出力メソッドに対して複数回の呼び出しを行います。

results関数は、そのような呼び出しの全ての後で呼び出されます。 それはmap[string]anyのスライスを返すべきで、Loggerの出力メソッドへの各呼び出しに対して一つです。 マップのキーと値は、Handlerの出力のキーと値に対応しているべきです。 出力内の各グループは、それ自体がネストしたmap[string]anyとして表現されるべきです。 標準のキーであるslog.TimeKey、slog.LevelKey、slog.MessageKeyを使用すべきです。

もしHandlerがJSONを出力するなら、`map[string]any`を引数にして encoding/json.Unmarshal を呼び出すことで、適切なデータ構造が作成されます。

もしHandlerが意図的にテストでチェックされる属性を削除するなら、 results関数はその欠如をチェックし、それを返すマップに追加すべきです。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL