@@ -2,8 +2,10 @@ package sqlmock
22
33import (
44 "database/sql"
5+ "database/sql/driver"
56 "errors"
67 "fmt"
8+ "reflect"
79 "strconv"
810 "sync"
911 "testing"
@@ -1217,3 +1219,44 @@ func queryWithTimeout(t time.Duration, db *sql.DB, query string, args ...interfa
12171219 return nil , fmt .Errorf ("query timed out after %v" , t )
12181220 }
12191221}
1222+
1223+ func Test_sqlmock_Prepare_and_Exec (t * testing.T ) {
1224+ db , mock , err := New ()
1225+ if err != nil {
1226+ t .Errorf ("an error '%s' was not expected when opening a stub database connection" , err )
1227+ }
1228+ defer db .Close ()
1229+ query := "SELECT name, email FROM users WHERE name = ?"
1230+
1231+ mock .ExpectPrepare ("SELECT (.+) FROM users WHERE (.+)" )
1232+ expected := NewResult (1 , 1 )
1233+ mock .ExpectExec ("SELECT (.+) FROM users WHERE (.+)" ).
1234+ WillReturnResult (expected )
1235+ expectedRows := mock .NewRows ([]string {"id" , "name" , "email" }).AddRow (1 , "test" , "test@example.com" )
1236+ mock .ExpectQuery ("SELECT (.+) FROM users WHERE (.+)" ).WillReturnRows (expectedRows )
1237+
1238+ got , err := mock .(* sqlmock ).Prepare (query )
1239+ if err != nil {
1240+ t .Error (err )
1241+ return
1242+ }
1243+ if got == nil {
1244+ t .Error ("Prepare () stmt must not be nil" )
1245+ return
1246+ }
1247+ result , err := got .Exec ([]driver.Value {"test" })
1248+ if err != nil {
1249+ t .Error (err )
1250+ return
1251+ }
1252+ if ! reflect .DeepEqual (result , expected ) {
1253+ t .Errorf ("Eesults not equal. Expected: %v, Actual: %v" , expected , result )
1254+ return
1255+ }
1256+ rows , err := got .Query ([]driver.Value {"test" })
1257+ if err != nil {
1258+ t .Error (err )
1259+ return
1260+ }
1261+ defer rows .Close ()
1262+ }
0 commit comments