gpt4 book ai didi

go - 可测试的数据库/sql sql.Rows in go

转载 作者:IT王子 更新时间:2023-10-29 02:22:18 27 4
gpt4 key购买 nike

是否有测试/模拟函数的良好实践,这些函数将 sql.Rows 扫描到结构中。

func parseUsers(r *sql.Rows) (users []User, err error) {
for r.Next() {
var u User
if err = r.Scan(&u.Username,
&u.DisplayName,
&u.EmailAddress,
&u.IsEnabled,
&u.PhoneNumber); err != nil {
return []User{}, err
}
users = append(users, u)
}
err = r.Err()
return
}

但尝试做类似的事情:

func TestParseUsers(t *testing.T) {
//make mock sql.Rows
u, err := parseUsers(fakeRows)
//Do tests...
}

我看过 sqlx,但想保留数据库/sql 结构。我检查了 go-sqlmock,但我正在寻找没有大量构建的东西。

这种测试有好的策略吗?

最佳答案

Go 的方法是使用接口(interface)作为输入。

在您的情况下,它可能看起来像这样:

type Scanner interface {
Next()
Scan(User)
}

函数应该是这样的:

func parseUsers(s Scanner) (users []User, err error) {
// ...
}

现在测试非常容易,因为您可以创建一个模拟扫描器,它实现接口(interface)并记住调用方法时使用的参数。

关于go - 可测试的数据库/sql sql.Rows in go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253698/

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