源码索引 / CURRENT IMPLEMENTATION
learning/go-patterns/stages/03-errors-tests/main_test.go
51 行 · 点击行号可定位;函数链接随声明位置更新,不手填行号。
跳到函数 / 声明
package main
import (
"errors"
"strings"
"testing"
)
type errorSource struct {
err error
}
func (s errorSource) Lookup(string) (Price, error) {
return Price{}, s.err
}
func TestQuoteWrapsUnknownItem(t *testing.T) {
service := NewService(Catalog{})
_, err := service.Quote("book")
if err == nil {
t.Fatal("Quote returned nil error")
}
if !errors.Is(err, ErrUnknownItem) {
t.Fatalf("errors.Is(%v, ErrUnknownItem) = false", err)
}
if !strings.Contains(err.Error(), `quote "book"`) {
t.Fatalf("error %q does not contain operation context", err)
}
}
func TestQuotePreservesAnInjectedCause(t *testing.T) {
service := NewService(errorSource{err: ErrSourceUnavailable})
_, err := service.Quote("book")
if !errors.Is(err, ErrSourceUnavailable) {
t.Fatalf("errors.Is(%v, ErrSourceUnavailable) = false", err)
}
}
func TestQuoteReturnsPriceWithoutAnError(t *testing.T) {
service := NewService(Catalog{"book": {Item: "book", Cents: 2100}})
got, err := service.Quote("book")
if err != nil {
t.Fatalf("Quote returned error: %v", err)
}
if got.Cents != 2100 {
t.Fatalf("Quote returned %#v", got)
}
}