Remove Asserter interface and combine its functionality into Adapter

This commit is contained in:
Ian Tan 2017-11-17 17:20:42 +08:00
parent 71174be05a
commit 27ec78afaa

View File

@ -6,42 +6,53 @@ import (
sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1" sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
) )
var (
db *sql.DB
mock sqlmock.Sqlmock
)
func init() {
var err error
db, mock, err = sqlmock.NewWithDSN("mock_gorm_dsn")
if err != nil {
panic(err.Error())
}
}
// Adapter provides an abstract interface over concrete mock database
// implementations (e.g. go-sqlmock or go-testdb)
type Adapter interface { type Adapter interface {
Open() (error, Asserter) ExpectQuery(stmt string) ExpectedQuery
Close() error ExpectExec(stmt string) ExpectedExec
} }
// SqlmockAdapter implemenets the Adapter interface using go-sqlmock // SqlmockAdapter implemenets the Adapter interface using go-sqlmock
// it is the default Adapter // it is the default Adapter
type SqlmockAdapter struct { type SqlmockAdapter struct {
mockDb *sql.DB db *sql.DB
mock *sqlmock.Sqlmock mocker sqlmock.Sqlmock
} }
// Open returns the raw sql.DB instance and an Asserter func NewSqlmockAdapter(dialect string, args ...interface{}) (error, *DB, Adapter) {
func (adapter *SqlmockAdapter) Open() (error, Asserter) { gormDb, err := Open("sqlmock", "mock_gorm_dsn")
mockDb, mock, err := sqlmock.NewWithDSN("mock_gorm_dsn")
adapter.mockDb = mockDb
if err != nil { if err != nil {
return err, nil return err, nil, nil
} }
return nil, &SqlmockAsserter{mock: mock, sqlmockDB: mockDb} return nil, gormDb, &SqlmockAdapter{db: db, mocker: mock}
} }
func (adapter *SqlmockAdapter) Close() error { func (a *SqlmockAdapter) ExpectQuery(stmt string) ExpectedQuery {
return adapter.mockDb.Close() q := a.mocker.ExpectQuery(stmt)
return &SqlmockQuery{query: q}
} }
type SqlmockAsserter struct { func (a *SqlmockAdapter) ExpectExec(stmt string) ExpectedExec {
sqlmockDB *sql.DB e := a.mocker.ExpectExec(stmt)
mock sqlmock.Sqlmock
}
func (a *SqlmockAsserter) Query(query string) Query { return &SqlmockExec{exec: e}
q := a.mock.ExpectQuery(query)
return &SqlmockQuery{q}
} }