AdSense

網頁

2022/2/21

Golang 使用go-sqlmock mock sql INSERT

Go語言的go-sqlmock函式庫可對sql driver的行為做mock,也就是可返回mock的查詢結果。


下面範例使用go-sqlmock對SQL執行做mock來做單元測試。

範例環境:

  • Go 1.17


主程式

參考「Golang sql PostgreSQL新增範例」主程式main.go中新增資料函式CreateEmployee()


測試程式

測試程式main_test.goTestCreateEmployee()使用go-sqlmock對sql進行mock。

參考「Golang go-sqlmock API簡介」。

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)
    }
}

github


沒有留言:

AdSense