Skip to content

Instantly share code, notes, and snippets.

@thevuuranusls
Forked from void-main/db_test.go
Created September 14, 2019 04:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thevuuranusls/60873168b4301019487a10d45ad6babb to your computer and use it in GitHub Desktop.
Save thevuuranusls/60873168b4301019487a10d45ad6babb to your computer and use it in GitHub Desktop.
Test Beego ORM with mocked sql driver
package db
import (
"testing"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
"time"
_ "github.com/go-sql-driver/mysql"
"gopkg.in/DATA-DOG/go-sqlmock.v1"
)
var o orm.Ormer
func init() {
err := orm.RegisterDriver("mysql", orm.DRMySQL)
if err != nil {
logs.Error(err)
panic(err)
}
orm.Debug = true
}
func testWithDb(t *testing.T, f func(t *testing.T, mock sqlmock.Sqlmock)) {
db, mock, err := sqlmock.New()
if err != nil {
t.Errorf("failed to open stub database connection, error: %v", err)
}
orm.AddAliasWthDB("default", "mysql", db)
orm.SetDataBaseTZ("default", time.Now().Location())
defer db.Close()
f(t, mock)
}
func TestDBWithMockedSqlDriver(t *testing.T) {
testWithDb(t, func(t *testing.T, mock sqlmock.Sqlmock) {
// setup mock
columns := []string{"id"}
mock.ExpectQuery("SELECT (.+) FROM `XXX`").
WillReturnRows(
sqlmock.NewRows(columns).
FromCSVString("1").
FromCSVString("2"))
// call function to test
db.WhateverToTest()
// we make sure that all expectations were met
if err := mock.ExpectationsWereMet(); err != nil {
t.Errorf("there were unfulfilled expectations: %s", err)
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment