PPysolate SpineREAD THE CODE · UNDERSTAND THE SYSTEM
课程与章节
源码索引 / CURRENT IMPLEMENTATION

learning/go-patterns/stages/02-dependencies/main_test.go

44 行 · 点击行号可定位;函数链接随声明位置更新,不手填行号。

跳到函数 / 声明
package main

import (
	"errors"
	"testing"
)

var errFakeSource = errors.New("fake source failure")

type fakeSource struct {
	item  string
	price Price
	err   error
}

func (f *fakeSource) Lookup(item string) (Price, error) {
	f.item = item
	return f.price, f.err
}

func TestServiceUsesInjectedSource(t *testing.T) {
	source := &fakeSource{price: Price{Item: "book", Cents: 2100}}
	service := NewService(source)

	got, err := service.Quote("book")
	if err != nil {
		t.Fatalf("Quote returned error: %v", err)
	}
	if source.item != "book" {
		t.Fatalf("source received %q", source.item)
	}
	if got != source.price {
		t.Fatalf("Quote returned %#v", got)
	}
}

func TestServiceReturnsInjectedSourceError(t *testing.T) {
	source := &fakeSource{err: errFakeSource}
	service := NewService(source)

	if _, err := service.Quote("book"); err != errFakeSource {
		t.Fatalf("Quote error = %v, want %v", err, errFakeSource)
	}
}