関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。。
以下のブログ記事から nalgeon/be というライブラリを知りました。
めっちゃシンプルで使いやすいですね。個人的にドンピシャなライブラリです。
こんな感じでシンプルなのが良いんですよ。それぞれがジェネリック対応となっているため、どのような型でもアサート出来るようになっています。
関数も
- Equal
- Err
- True
の3つだけです。
自分用に使い方のメモを残しておくことにしました。今回は Err 関数。
サンプル
be_err_test.go
package main import ( "errors" "fmt" "reflect" "testing" "github.com/nalgeon/be" ) type ( ValueError struct { V int } ) var _ error = (*ValueError)(nil) func (v *ValueError) Error() string { return fmt.Sprintf("invalid value: %d", v.V) } var ( ErrInvalid = errors.New("invalid value") ) func errSometime(v int) error { switch { case v > 100: return &ValueError{v} case v > 10: return ErrInvalid default: return nil } } func TestBeErr(t *testing.T) { t.Run("ok", func(t *testing.T) { be.Err(t, errSometime(1), nil) }) t.Run("ng", func(t *testing.T) { be.Err(t, errSometime(99), nil) }) t.Run("return-nil", func(t *testing.T) { err := errSometime(5) be.Err(t, err, nil) }) t.Run("return-err", func(t *testing.T) { err := errSometime(99) be.Err(t, err) }) t.Run("check-message", func(t *testing.T) { err := errSometime(20) be.Err(t, err, "invalid") // 指定したメッセージが含まれていればOKとなる }) t.Run("check-type-is", func(t *testing.T) { err := errSometime(20) be.Err(t, err, ErrInvalid) }) t.Run("check-type-as", func(t *testing.T) { err := errSometime(199) be.Err(t, err, reflect.TypeFor[*ValueError]()) // Asの場合は reflect.Type を指定する }) }
実行例
$ task task: [default] go test -v === RUN TestBeErr === RUN TestBeErr/ok === RUN TestBeErr/ng be_err_test.go:44: unexpected error: invalid value === RUN TestBeErr/return-nil === RUN TestBeErr/return-err === RUN TestBeErr/check-message === RUN TestBeErr/check-type-is === RUN TestBeErr/check-type-as --- FAIL: TestBeErr (0.00s) --- PASS: TestBeErr/ok (0.00s) --- FAIL: TestBeErr/ng (0.00s) --- PASS: TestBeErr/return-nil (0.00s) --- PASS: TestBeErr/return-err (0.00s) --- PASS: TestBeErr/check-message (0.00s) --- PASS: TestBeErr/check-type-is (0.00s) --- PASS: TestBeErr/check-type-as (0.00s) FAIL exit status 1 FAIL github.com/devlights/try-golang/examples/testing/be_library/err 0.003s
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。





