mirror of
https://github.com/wahyd4/go-mocket.git
synced 2026-08-09 04:46:54 +10:00
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
/*
|
|
Package go_mocket is way to mock DB for GORM and just sql package usage
|
|
First you need to activate package somewhere in your tests code like this
|
|
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
mocket "github.com/Selvatico/go-mocket"
|
|
"github.com/jinzhu/gorm"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func SetupTests() {
|
|
mocket.Catcher.Register()
|
|
// GORM
|
|
db, err := gorm.Open("fake_test", "connection_string") // Could be any connection string
|
|
DB = db
|
|
|
|
// OR
|
|
// Regular sql package usage
|
|
db, err := sql.Open(driver, source)
|
|
}
|
|
|
|
func GetUsers(db *sql.DB) []map[string]interface {} {
|
|
var res []map[string]interface{}
|
|
age := 27
|
|
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
var name string
|
|
var age string
|
|
if err := rows.Scan(&name, &age); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
//fmt.Printf("%s is %d\n", name, age)
|
|
row := make(map[string]interface{})
|
|
row["name"] = name
|
|
row["age"] = age
|
|
res = append(res, row)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
return res
|
|
}
|
|
|
|
Somewhere in you tests:
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"testing"
|
|
"database/sql"
|
|
mocket "github.com/Selvatico/go-mocket"
|
|
)
|
|
|
|
func TestResponses (t *testing.T) {
|
|
mocket.Catcher.Register()
|
|
db, _ := sql.Open("fake_test", "connection_string") // Could be any connection string
|
|
DB = db
|
|
|
|
t.Run("Simple SELECT caught by query", func(t *testing.T) {
|
|
mocket.Catcher.Logging = true
|
|
commonReply := []map[string]interface{}{{"name": "FirstLast", "age": "30"}}
|
|
mocket.Catcher.Reset().NewMock().WithQuery(`SELECT name FROM users WHERE`).WithReply(commonReply)
|
|
result := GetUsers(DB)
|
|
if len(result) != 1 {
|
|
t.Errorf("Returned sets is not equal to 1. Received %d", len(result))
|
|
}
|
|
if result[0]["age"] != "30" {
|
|
t.Errorf("Age is not equal. Got %v", result[0]["age"])
|
|
}
|
|
})
|
|
}
|
|
|
|
For more information and use cases please check: https://github.com/Selvatico/go-mocket
|
|
|
|
*/
|
|
package go_mocket
|