要求:写一个商品结构体,实现添加商品的到数据库的方法,且写一个单元测试测试该方法mysql
原文件:goods.gogit
package goods import ( _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) // 数据库对象 var Db *sqlx.DB // 初始化连接数据库 func init() { database, err := sqlx.Open("mysql", "root:@tcp(127.0.0.1:3306)/shop") if err != nil { return } Db = database } // 商品结构体 type Goods struct { Id int `db:"id"` Name string `db:"name"` CreatedAt string `db:"created_at"` UpdatedAt string `db:"updated_at"` Cover string `db:"cover"` StockCount int `db:"stock_count"` } // 新增商品 func (p *Goods) Create() (*Goods, error) { goods := &Goods{ Name: p.Name, CreatedAt: p.CreatedAt, UpdatedAt: p.UpdatedAt, Cover: p.Cover, StockCount: p.StockCount, } // 将商品添加到数据库 r, err := Db.Exec("insert into goods(name, created_at, updated_at,cover,stock_count)values(?, ?, ?,?,?)", goods.Name, goods.CreatedAt, p.UpdatedAt, p.Cover, p.StockCount) if err != nil { return nil, err } id, err := r.LastInsertId() if err != nil { return nil, err } // 给商品添加商品ID goods.Id = int(id) // 添加成功 return goods, nil } // 获取商品详情 func GetGoodsDetail(goodsId int) (*Goods, error) { var goods []Goods err := Db.Select(&goods, "select * from goods where id=?", goodsId) if err != nil { return nil, err } return &goods[0], nil }
单元测试文件:goods_test.gogithub
package goods import ( "testing" "time" ) // 测试商品Create方法 func TestCreate(t *testing.T) { goods := &Goods{ Name: "点滴GO语言教程", CreatedAt: time.Now().Format("2006-01-02 15:04:05"), UpdatedAt: time.Now().Format("2006-01-02 15:04:05"), Cover: "goods/cover/20191230/diandi.png", StockCount: 100, } // 添加商品 res, err := goods.Create() if err != nil { t.Fatalf("添加商品信息测试失败,失败缘由:%v", err) } // 获取新添加的商品信息 newGoods, err := GetGoodsDetail(res.Id) if err != nil { t.Fatalf("获取商品信息测试失败,失败缘由:%v", err) } // 对比添加和返回的信息是否一致 if res.Id != newGoods.Id || res.StockCount != newGoods.StockCount || res.Cover != newGoods.Cover { t.Fatal("添加商品单元测试失败,写入信息和返回信息不符合预期!") } }
目录结构以下:sql
CMD命令行切换到demo1目录下执行:go test数据库
再次打开数据,发现数据已经成功入库!tcp