问:有什么方法可以使用 go 模拟 casssandra 会话,而无需实际连接到任何键空间/模式/数据库。我们可以模拟 cassandra 进行单元测试吗?
问问题
2332 次
2 回答
4
一般来说,最好的办法是使用接口而不是真正的 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)
}
在此示例中,我们使用方法接收器中的s.session
字段。*Service
除了直接使用会话之外,我们还可以创建允许我们稍后创建模拟的接口。
// 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
使用模拟实现来实现并控制返回值以进行测试。
接口的完整代码示例在这里
于 2018-06-25T20:51:37.293 回答