Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- )
- type (
- // ------------------
- // Interfaces
- // ------------------
- DatabaseLayerLargeInterface interface { /* Most likely defined in a separate package */
- Find(map[string]interface{}) []interface{}
- Create()
- Update()
- Delete()
- }
- TemplateStorage interface {
- Find(map[string]interface{}) []interface{} /* matches DatabaseLayerLargeInterface.Find signature */
- }
- TemplateFinder interface {
- Find(namespace, language string) string
- }
- // ---------------
- // Implementations
- // ---------------
- Database struct{} /* Most likely defined in a separate package */
- TemplateFinder1 struct{ storage DatabaseLayerLargeInterface }
- TemplateFinder2 struct{ storage TemplateStorage }
- )
- func (db Database) Find(criteria map[string]interface{}) []interface{} { return []interface{}{} }
- func (db Database) Create() {}
- func (db Database) Update() {}
- func (db Database) Delete() {}
- func NewTemplateFinder1(storage DatabaseLayerLargeInterface) TemplateFinder {
- return TemplateFinder1{storage}
- }
- func NewTemplateFinder2(storage TemplateStorage) TemplateFinder {
- return TemplateFinder2{storage}
- }
- func (f TemplateFinder1) Find(namespace, language string) string {
- return "TemplateFinder1 will delegate the actual 'finding' to its (bloated) DatabaseLayerLargeInterface storage... this is not the actual template!"
- }
- func (f TemplateFinder2) Find(namespace, language string) string {
- return "TemplateFinder2 will delegate the actual 'finding' to its (slim) TemplateStorage storage... this is not the actual template!"
- }
- func main() {
- db := Database{}
- tf1 := NewTemplateFinder1(db)
- tf2 := NewTemplateFinder2(db)
- namespace := "push.fact.loan"
- language := "br"
- fmt.Println(tf1.Find(namespace, language))
- fmt.Println(tf2.Find(namespace, language))
- // Questions
- //
- // When testing TemplateFinder1 ...
- // - how many methods do we need to mock in TemplateFinder1.storage?
- // - what if our DatabaseLayerLargeInterface expands?
- //
- // When testing TemplateFinder2 ...
- // - how many methods do we need to mock in TemplateFinder2.storage?
- // - what if our DatabaseLayerLargeInterface expands?
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement