diff --git a/sqlmock.go b/sqlmock.go index e6129c4..8c344cd 100644 --- a/sqlmock.go +++ b/sqlmock.go @@ -340,7 +340,6 @@ func (c *sqlmock) Query(query string, args []driver.Value) (rw driver.Rows, err } defer expected.Unlock() - expected.triggered = true if !expected.queryMatches(query) { return nil, fmt.Errorf("query '%s', does not match regex [%s]", query, expected.sqlRegex.String()) @@ -358,6 +357,7 @@ func (c *sqlmock) Query(query string, args []driver.Value) (rw driver.Rows, err 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) } + expected.triggered = true return expected.rows, err } diff --git a/sqlmock_test.go b/sqlmock_test.go index 616b9e7..31f57d4 100644 --- a/sqlmock_test.go +++ b/sqlmock_test.go @@ -658,3 +658,35 @@ func ExampleSqlmock_goroutines() { } // Output: } + +// False Positive - passes despite mismatched Exec +// see #37 issue +func TestRunExecsWithOrderedShouldNotMeetAllExpectations(t *testing.T) { + db, dbmock, _ := New() + dbmock.ExpectExec("THE FIRST EXEC") + dbmock.ExpectExec("THE SECOND EXEC") + + _, _ = db.Exec("THE FIRST EXEC") + _, _ = db.Exec("THE WRONG EXEC") + + err := dbmock.ExpectationsWereMet() + if err == nil { + t.Fatal("was expecting an error, but there wasn't any") + } +} + +// False Positive - passes despite mismatched Exec +// see #37 issue +func TestRunQueriesWithOrderedShouldNotMeetAllExpectations(t *testing.T) { + db, dbmock, _ := New() + dbmock.ExpectQuery("THE FIRST EXEC") + dbmock.ExpectQuery("THE SECOND EXEC") + + _, _ = db.Query("THE FIRST EXEC") + _, _ = db.Query("THE WRONG EXEC") + + err := dbmock.ExpectationsWereMet() + if err == nil { + t.Fatal("was expecting an error, but there wasn't any") + } +}