Как мы можем издеваться над сессией Кассандры, используя Голанг? - PullRequest
0 голосов
/ 25 июня 2018

В: Есть ли способ смоделировать сеанс casssandra с помощью go без фактического подключения к любому пространству ключей / схеме / БД.Можем ли мы издеваться над Кассандрой для юнит-тестирования?

1 Ответ

0 голосов
/ 25 июня 2018

В общем, лучше всего использовать интерфейсы вместо реальной реализации библиотеки Кассандры.

Вы не включили пример, который я создал ниже:

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 с помощью фиктивной реализации и контролировать возвращаемые значения для тестирования.

Fullпример кода интерфейсов здесь

...