gpt4 book ai didi

sql - 如何 stub sqlmock 以永不返回错误?

转载 作者:IT王子 更新时间:2023-10-29 02:11:04 24 4
gpt4 key购买 nike

我无法测试任意使用数据库的函数 NewDao。我想检查返回的 Dao 是否既没有 nil client 也没有 nil product。

type Dao struct {
client ClientDao
product ProductDao
}

func (d *Dao) Client() ClientDao {
return d.client
}

func (d *Dao) Product() ProductDao {
return d.product
}

func NewDao(db *sql.DB) (*Dao, error) {
if db == nil {
return nil, errors.New("Can't create a dao from nil database")
}
client, err := newClientDao(db) // Uses db arbitrarily
if err != nil {
return nil, err
}
product, err := newProductDao(db) // Uses db arbitrarily
if err != nil {
return nil, err
}
return &Dao{client, product}, nil
}

我使用 sqlmock 测试 NewDao() 但它总是失败,因为我不知道 mock 需要期待什么。

func TestNewDao(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
t.Fatal("Can't create database for test dao")
}

// How to set mock to expect anything and never fail?
// mock.ExpectQuery(any) ?

dao, err := NewDao(db)

// err is never nil, because mock has no expectations

if err != nil {
t.Fatal("Can't create dao for test dao.User %q", err)
}
if dao.User() == nil {
t.Fatalf("User dao is nil")
}
if dao.Client() == nil {
t.Fatalf("Client dao is nil")
}
}

有谁知道如何 stub sqlmock 以实现我的目的?或者可以指定一个替代 sqlmock 库?

最佳答案

您在 NewDao 中的最后一次返回中缺少第二项:

返回 &Dao{client, product}

应该是:

返回 &Dao{client, product}, nil

return 语句必须“返回”函数头中声明的所有内容。

关于sql - 如何 stub sqlmock 以永不返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47180636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com