go写一个复杂的单元测试例子

要求:写一个商品结构体,实现添加商品的到数据库的方法,且写一个单元测试测试该方法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

相关文章
相关标签/搜索