Skip to content

Commit d4cd2ca

Browse files
committed
closes #50
1 parent 05f39e9 commit d4cd2ca

File tree

4 files changed

+28
-1
lines changed

4 files changed

+28
-1
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ go:
66
- 1.4
77
- 1.5
88
- 1.6
9+
- 1.7
910
- tip
1011

1112
script: go test -race

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ It only asserts that argument is of `time.Time` type.
188188

189189
## Changes
190190

191+
- **2016-11-02** - `db.Prepare()` was not validating expected prepare SQL
192+
query. It should still be validated even if Exec or Query is not
193+
executed on that prepared statement.
191194
- **2016-02-23** - added **sqlmock.AnyArg()** function to provide any kind
192195
of argument matcher.
193196
- **2016-02-23** - convert expected arguments to driver.Value as natural

sqlmock.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,12 @@ func (c *sqlmock) Prepare(query string) (driver.Stmt, error) {
291291
}
292292
return nil, fmt.Errorf(msg, query)
293293
}
294+
defer expected.Unlock()
295+
if !expected.sqlRegex.MatchString(query) {
296+
return nil, fmt.Errorf("query '%s', does not match regex [%s]", query, expected.sqlRegex.String())
297+
}
294298

295299
expected.triggered = true
296-
expected.Unlock()
297300
return &statement{c, query, expected.closeErr}, expected.err
298301
}
299302

sqlmock_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,3 +753,23 @@ func TestEmptyRowSet(t *testing.T) {
753753
t.Fatalf("all expectations should be met: %s", err)
754754
}
755755
}
756+
757+
// Based on issue #50
758+
func TestPrepareExpectationNotFulfilled(t *testing.T) {
759+
t.Parallel()
760+
db, mock, err := New()
761+
if err != nil {
762+
t.Errorf("an error '%s' was not expected when opening a stub database connection", err)
763+
}
764+
defer db.Close()
765+
766+
mock.ExpectPrepare("^BADSELECT$")
767+
768+
if _, err := db.Prepare("SELECT"); err == nil {
769+
t.Fatal("prepare should not match expected query string")
770+
}
771+
772+
if err := mock.ExpectationsWereMet(); err == nil {
773+
t.Errorf("was expecting an error, since prepared statement query does not match, but there was none")
774+
}
775+
}

0 commit comments

Comments
 (0)