go-web/framework/containter_test.go

89 lines
1.4 KiB
Go
Raw Permalink Normal View History

package framework
import (
"log"
"reflect"
"testing"
)
// {{{ contract
const DummyProviderName = "container:test"
type IDummyService interface {
GetDummy() DummyStruct
}
type DummyStruct struct {
Name string
}
// }}}
// {{{ provider
type DummyServiceProvider struct{}
func (p *DummyServiceProvider) Name() string {
return DummyProviderName
}
func (p *DummyServiceProvider) Register(c Container) NewInstance {
return NewDummyService
}
func (p *DummyServiceProvider) Init(c Container) error {
log.Println("init")
return nil
}
func (p *DummyServiceProvider) InstantiateLater() bool {
return true
}
func (p *DummyServiceProvider) Params(c Container) []interface{} {
return []interface{}{c}
}
// }}}
// {{{ service
type DummyService struct {
IDummyService
// parameters
c Container
}
func (d *DummyService) GetDummy() DummyStruct {
return DummyStruct{
Name: "Dummy!",
}
}
func NewDummyService(params ...interface{}) (interface{}, error) {
c := params[0].(Container)
log.Println("new dummy service")
return &DummyService{c: c}, nil
}
// }}}
func TestBind(t *testing.T) {
container := NewGoWebContainer()
provider := &DummyServiceProvider{}
container.Bind(provider)
2024-09-29 21:50:00 +00:00
dummyService := container.MustMake(DummyProviderName).(IDummyService)
want := DummyStruct{
Name: "Dummy!",
}
got := dummyService.GetDummy()
if !reflect.DeepEqual(want, got) {
t.Errorf("want %v, got %v ", want, got)
}
}