gpt4 book ai didi

go - 我们如何使用 golang 模拟 cassandra session ?

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

问:有没有什么方法可以在不实际连接到任何键空间/模式/数据库的情况下使用 go 来模拟 cassandra session 。我们可以模拟 cassandra 进行单元测试吗?

最佳答案

一般来说,最好的办法是使用接口(interface)而不是真正的 cassandra 库实现。

您没有包含示例,所以我在下面创建了示例:

type Service struct {
session *gocql.Session
}

func (s *Service) Tweets() {

var id gocql.UUID
var text string

q := `SELECT id, text FROM tweet WHERE timeline = ? LIMIT 1`
if err := s.session.Query(q, "me").Consistency(gocql.One).Scan(&id, &text); err != nil {
log.Fatal(err)
}
fmt.Println("Tweet:", id, text)

}

在这个例子中,我们使用来自 *Service 方法接收器的 s.session 字段。

我们可以创建允许我们稍后创建模拟的接口(interface),而不是直接使用 session 。

// SessionInterface allows gomock mock of gocql.Session
type SessionInterface interface {
Query(string, ...interface{}) QueryInterface
}

// QueryInterface allows gomock mock of gocql.Query
type QueryInterface interface {
Bind(...interface{}) QueryInterface
Exec() error
Iter() IterInterface
Scan(...interface{}) error
}

现在我们更新后的代码可能如下所示:

type Service struct {
session SessionInterface
}

这意味着我们可以使用模拟实现来实现 SessionInterface 并控制返回值以进行测试。

接口(interface)的完整代码示例 here

关于go - 我们如何使用 golang 模拟 cassandra session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51031167/

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