Skip to content

Instantly share code, notes, and snippets.

@oyakata
Created August 7, 2017 08:51
Show Gist options
  • Save oyakata/124c655ee93d7b326f16bc9da1c761bb to your computer and use it in GitHub Desktop.
Save oyakata/124c655ee93d7b326f16bc9da1c761bb to your computer and use it in GitHub Desktop.
sqlmockはMatchExpectationsInOrderにfalseを渡すとクエリの実行順序のチェックは止めてくれる
package imgw
import (
"fmt"
"github.com/DATA-DOG/go-sqlmock"
"database/sql"
"testing"
)
const (
SQL1 = `SELECT age FROM foo WHERE age > ?`
SQL2 = `SELECT age FROM foo`
)
func Foo(db *sql.DB) error {
stmt, err := db.Prepare(SQL1)
if err != nil {
return err
}
rows, err := db.Query(SQL2)
if err != nil {
return err
}
fmt.Println(rows, err)
var count int
err = stmt.QueryRow(10).Scan(&count)
fmt.Println(err, count)
return nil
}
func TestImagawaYoshimoto(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
panic(err)
}
defer db.Close()
mock.MatchExpectationsInOrder(false) // ここでfalse渡すと順番のチェックはしなくなる
mock.ExpectQuery(SQL2).
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(2))
prep := mock.ExpectPrepare(SQL1)
prep.ExpectQuery().WithArgs(10).WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(5))
err = Foo(db)
if err != nil {
t.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment