slogtest

package
v1.25.0 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2025 License: MIT Imports: 2 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.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) // 実際のテストでは、t.Fatalを使用します。
			}
			ms = append(ms, m)
		}
		return ms
	}
	err := slogtest.TestHandler(h, results)
	if err != nil {
		log.Fatal(err)
	}

}

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Run added in v1.22.0

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

Runは、[TestHandler] と同じテストケースで [slog.Handler] を実行しますが、 各ケースをサブテストで実行します。各テストケースでは、まずnewHandlerを呼び出して テスト対象のハンドラのインスタンスを取得し、次にテストケースを実行し、 次に結果を取得するためにresultを呼び出します。テストケースが失敗すると、t.Errorを呼び出します。

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.TimeKeyslog.LevelKeyslog.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