Skip to content

Instantly share code, notes, and snippets.

@ckaminer
Last active July 6, 2018 18:18
Show Gist options
  • Save ckaminer/e37a97b7e9d9747384321a880cd7ba5c to your computer and use it in GitHub Desktop.
Save ckaminer/e37a97b7e9d9747384321a880cd7ba5c to your computer and use it in GitHub Desktop.
// database package
type DBInterface interface {
CreateItem(Item) (*Item, error)
}
type DB struct {
*sql.DB
}
func (db *DB) CreateItem(item Item) (*Item, error) {
query := `INSERT INTO Table_Items(Name) VALUES(@itemName)`
db.Query(query, sql.Named("itemName", item.Name))
return &item, nil
}
type MockDB struct {}
func (db *MockDB) CreateItem(item Item) (*Item, error) {
i := Item{Name: "Foo"}
return &i, nil
}
// shopping cart package - import database package
type Cart struct {
DB db.DBInterface
}
// Live implementation
db := db.DB{*sql.DB}
cartService := Cart{DB: &db}
// Mock out db when testing the cart service
db := db.MockDB{}
cartService := Cart{DB: &mockDB}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment