Go語言的go-sqlmock函式庫可對sql driver的行為做mock,也就是可返回mock的查詢結果。
下面範例使用go-sqlmock對SQL執行做mock來做單元測試。
範例環境:
- Go 1.17
主程式
參考「Golang sql PostgreSQL新增範例」主程式main.go
中新增資料函式CreateEmployee()
。
測試程式
測試程式main_test.go
在TestCreateEmployee()
使用go-sqlmock對sql進行mock。
main_test.go
package main
import (
"testing"
"github.com/DATA-DOG/go-sqlmock"
)
func TestCreateEmployee(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
t.Fatalf("opening a stub database connection error=%s", err)
}
defer db.Close()
mock.ExpectBegin()
rows := sqlmock.NewRows([]string{"id"}).AddRow(1) // mock return rows
mock.ExpectQuery("^INSERT INTO employee.+$").WillReturnRows(rows)
mock.ExpectCommit()
id, err := CreateEmployee(db, &Employee{})
expected := int64(1)
if id != expected {
t.Errorf("Expected %v, but %v", expected, id)
}
}
沒有留言:
張貼留言