Skip to content

Commit 9958e5c

Browse files
committed
Merge pull request DATA-DOG#39 from jamiecuthill/master
Trigger expectations met when query and args matched
2 parents 3730250 + 4689a4a commit 9958e5c

2 files changed

Lines changed: 37 additions & 6 deletions

File tree

sqlmock.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,14 +240,16 @@ func (c *sqlmock) Exec(query string, args []driver.Value) (res driver.Result, er
240240
return nil, fmt.Errorf("exec query '%s', arguments do not match: %s", query, err)
241241
}
242242

243+
expected.triggered = true
244+
243245
if expected.err != nil {
244246
return nil, expected.err // mocked to return error
245247
}
246248

247249
if expected.result == nil {
248250
return nil, fmt.Errorf("exec query '%s' with args %+v, must return a database/sql/driver.result, but it was not set for expectation %T as %+v", query, args, expected, expected)
249251
}
250-
expected.triggered = true
252+
251253
return expected.result, err
252254
}
253255

@@ -349,6 +351,8 @@ func (c *sqlmock) Query(query string, args []driver.Value) (rw driver.Rows, err
349351
return nil, fmt.Errorf("exec query '%s', arguments do not match: %s", query, err)
350352
}
351353

354+
expected.triggered = true
355+
352356
if expected.err != nil {
353357
return nil, expected.err // mocked to return error
354358
}
@@ -357,7 +361,6 @@ func (c *sqlmock) Query(query string, args []driver.Value) (rw driver.Rows, err
357361
return nil, fmt.Errorf("query '%s' with args %+v, must return a database/sql/driver.rows, but it was not set for expectation %T as %+v", query, args, expected, expected)
358362
}
359363

360-
expected.triggered = true
361364
return expected.rows, err
362365
}
363366

sqlmock_test.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -679,14 +679,42 @@ func TestRunExecsWithOrderedShouldNotMeetAllExpectations(t *testing.T) {
679679
// see #37 issue
680680
func TestRunQueriesWithOrderedShouldNotMeetAllExpectations(t *testing.T) {
681681
db, dbmock, _ := New()
682-
dbmock.ExpectQuery("THE FIRST EXEC")
683-
dbmock.ExpectQuery("THE SECOND EXEC")
682+
dbmock.ExpectQuery("THE FIRST QUERY")
683+
dbmock.ExpectQuery("THE SECOND QUERY")
684684

685-
_, _ = db.Query("THE FIRST EXEC")
686-
_, _ = db.Query("THE WRONG EXEC")
685+
_, _ = db.Query("THE FIRST QUERY")
686+
_, _ = db.Query("THE WRONG QUERY")
687687

688688
err := dbmock.ExpectationsWereMet()
689689
if err == nil {
690690
t.Fatal("was expecting an error, but there wasn't any")
691691
}
692692
}
693+
694+
func TestRunExecsWithExpectedErrorMeetsExpectations(t *testing.T) {
695+
db, dbmock, _ := New()
696+
dbmock.ExpectExec("THE FIRST EXEC").WillReturnError(fmt.Errorf("big bad bug"))
697+
dbmock.ExpectExec("THE SECOND EXEC").WillReturnResult(NewResult(0, 0))
698+
699+
_, _ = db.Exec("THE FIRST EXEC")
700+
_, _ = db.Exec("THE SECOND EXEC")
701+
702+
err := dbmock.ExpectationsWereMet()
703+
if err != nil {
704+
t.Fatalf("all expectations should be met: %s", err)
705+
}
706+
}
707+
708+
func TestRunQueryWithExpectedErrorMeetsExpectations(t *testing.T) {
709+
db, dbmock, _ := New()
710+
dbmock.ExpectQuery("THE FIRST QUERY").WillReturnError(fmt.Errorf("big bad bug"))
711+
dbmock.ExpectQuery("THE SECOND QUERY").WillReturnRows(NewRows([]string{"col"}).AddRow(1))
712+
713+
_, _ = db.Query("THE FIRST QUERY")
714+
_, _ = db.Query("THE SECOND QUERY")
715+
716+
err := dbmock.ExpectationsWereMet()
717+
if err != nil {
718+
t.Fatalf("all expectations should be met: %s", err)
719+
}
720+
}

0 commit comments

Comments
 (0)