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

相關文章
相關標籤/搜索