🥡
[Go] sqlmockの使い方備忘録
初めに
Goでテストケースを書く時に、sqlのMockを作りたい時があります。
今回sqlmock
を使ってMockを作ってみましたが、自分が詰まったところをまとめてみました。
基本的な使い方
こちらの記事を参考にしました。大変勉強になりました。
正規表現の部分
mock.ExpectQuery(regexp.QuoteMeta(`SELECT id, user_name FROM users WHERE user_name=$1`)).
WithArgs(1, "uesr").
WillReturnRows(
sqlmock.NewRows([]string{"id", "user_name"}).
AddRow(1, "user"))
type user struct {
id int
user string
}
err = Db.QueryRow("SELECT id, user_name FROM users WHERE user_name=$1", username).
Scan(&u.id, &u.user)
ここで、mock.ExpectQuery()
で書かれたクエリは、Db.QueryRow()
で書かれたクエリと一致した時に、WillReturnRows()
で書かれた内容が返ってくる。
逆にクエリが同じじゃないとエラーが吐かれる。
mock.ExpectQuery()
のクエリが正規表現に対応しているので、より柔軟にいろんなクエリ文のMockを作ることができる。
例
Discussion