我目前正在使用go-sqlmock来模拟我的数据库。
执行查询时,是否有任何方法可以获取已传递给sql驱动程序的值?例如,此处作为参数传递的arg
变量:
import (
"database/sql"
)
func retrieveInfo(){
// this function returns an initialized instance of type *sql.DB
DbDriver := initDb()
query := "my query"
arg := 3
rows, err := Db_driver.Query(query, arg)
// ...
}
然后我想测试这个函数,我想在测试时知道变量arg
的值。我想这应该是可能的,因为它被传递给go-sqlmock创建的“假”驱动程序。我的测试逻辑如下所示:
import "github.com/DATA-DOG/go-sqlmock"
// Inits mock and overwrites the original driver
db, mock, err := sqlmock.New()
Db_driver = db
func TestRetrieveInfo(t *testing.T){
// query that matchs the one in retrieveInfo()
query := "..."
queryRows := sqlmock.NewRows([]string{"column1, column2"}).FromCSVString("value1, value2")
mock.ExpectQuery(query).WillReturnRows(queryRows)
}
2条答案
按热度按时间kcwpcxri1#
您可以使用检测来 Package 真实的的驱动程序,以记录这些值。
使用软件包github.com/luna-duclos/instrumentedsql。
lztngnrs2#
您可以通过创建自己的Match方法来捕获arg值,例如:
那么在你的测试中你会得到
然后可以在
capture.CapturedValue
上执行Assert或其他操作