66 "sync"
77 "testing"
88 "time"
9+ "github.com/golang/go/src/pkg/strconv"
910)
1011
1112func cancelOrder (db * sql.DB , orderID int ) error {
@@ -861,9 +862,80 @@ func TestUnexpectedRollbackOrder(t *testing.T) {
861862 return
862863 }
863864 mock .ExpectBegin ()
864- mock . ExpectCommit ()
865+
865866 tx , _ := db .Begin ()
866867 if err := tx .Rollback (); err == nil {
867868 t .Error ("an error was expected when calling rollback, but got none" )
868869 }
870+ }
871+
872+ func TestPrepareExec (t * testing.T ) {
873+ // Open new mock database
874+ db , mock , err := New ()
875+ if err != nil {
876+ fmt .Println ("error creating mock database" )
877+ return
878+ }
879+ defer db .Close ()
880+ mock .ExpectBegin ()
881+ ep := mock .ExpectPrepare ("INSERT INTO ORDERS\\ (ID, STATUS\\ ) VALUES \\ (\\ ?, \\ ?\\ )" )
882+ for i := 0 ; i < 3 ; i ++ {
883+ ep .ExpectExec ().WillReturnResult (NewResult (1 ,1 ))
884+ }
885+ mock .ExpectCommit ()
886+ tx , _ := db .Begin ()
887+ stmt , err := tx .Prepare ("INSERT INTO ORDERS(ID, STATUS) VALUES (?, ?)" )
888+ if err != nil {
889+ t .Fatal (err )
890+ }
891+ defer stmt .Close ()
892+ for i := 0 ; i < 3 ; i ++ {
893+ _ , err := stmt .Exec (i , "Hello" + strconv .Itoa (i ))
894+ if err != nil {
895+ t .Fatal (err )
896+ }
897+ }
898+ tx .Commit ()
899+ if err := mock .ExpectationsWereMet (); err != nil {
900+ t .Errorf ("there were unfulfilled expections: %s" , err )
901+ }
902+ }
903+
904+ func TestPrepareQuery (t * testing.T ) {
905+ // Open new mock database
906+ db , mock , err := New ()
907+ if err != nil {
908+ fmt .Println ("error creating mock database" )
909+ return
910+ }
911+ defer db .Close ()
912+ mock .ExpectBegin ()
913+ ep := mock .ExpectPrepare ("SELECT ID, STATUS FROM ORDERS WHERE ID = \\ ?" )
914+ ep .ExpectQuery ().WithArgs (101 ).WillReturnRows (NewRows ([]string {"ID" , "STATUS" }).AddRow (101 , "Hello" ))
915+ mock .ExpectCommit ()
916+ tx , _ := db .Begin ()
917+ stmt , err := tx .Prepare ("SELECT ID, STATUS FROM ORDERS WHERE ID = ?" )
918+ if err != nil {
919+ t .Fatal (err )
920+ }
921+ defer stmt .Close ()
922+ rows , err := stmt .Query (101 )
923+ if err != nil {
924+ t .Fatal (err )
925+ }
926+ defer rows .Close ()
927+ for rows .Next () {
928+ var (
929+ id int
930+ status string
931+ )
932+ if rows .Scan (& id , & status ); id != 101 || status != "Hello" {
933+ t .Fatal ("wrong query results" )
934+ }
935+
936+ }
937+ tx .Commit ()
938+ if err := mock .ExpectationsWereMet (); err != nil {
939+ t .Errorf ("there were unfulfilled expections: %s" , err )
940+ }
869941}
0 commit comments