sqlconn_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package sqlx
  2. import (
  3. "database/sql"
  4. "io"
  5. "testing"
  6. "github.com/DATA-DOG/go-sqlmock"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/tal-tech/go-zero/core/logx"
  9. )
  10. const mockedDatasource = "sqlmock"
  11. func init() {
  12. logx.Disable()
  13. }
  14. func TestSqlConn(t *testing.T) {
  15. mock := buildConn()
  16. mock.ExpectExec("any")
  17. mock.ExpectQuery("any").WillReturnRows(sqlmock.NewRows([]string{"foo"}))
  18. conn := NewMysql(mockedDatasource)
  19. db, err := conn.RawDB()
  20. assert.Nil(t, err)
  21. rawConn := NewSqlConnFromDB(db, withMysqlAcceptable())
  22. badConn := NewMysql("badsql")
  23. _, err = conn.Exec("any", "value")
  24. assert.NotNil(t, err)
  25. _, err = badConn.Exec("any", "value")
  26. assert.NotNil(t, err)
  27. _, err = rawConn.Prepare("any")
  28. assert.NotNil(t, err)
  29. _, err = badConn.Prepare("any")
  30. assert.NotNil(t, err)
  31. var val string
  32. assert.NotNil(t, conn.QueryRow(&val, "any"))
  33. assert.NotNil(t, badConn.QueryRow(&val, "any"))
  34. assert.NotNil(t, conn.QueryRowPartial(&val, "any"))
  35. assert.NotNil(t, badConn.QueryRowPartial(&val, "any"))
  36. assert.NotNil(t, conn.QueryRows(&val, "any"))
  37. assert.NotNil(t, badConn.QueryRows(&val, "any"))
  38. assert.NotNil(t, conn.QueryRowsPartial(&val, "any"))
  39. assert.NotNil(t, badConn.QueryRowsPartial(&val, "any"))
  40. assert.NotNil(t, conn.Transact(func(session Session) error {
  41. return nil
  42. }))
  43. assert.NotNil(t, badConn.Transact(func(session Session) error {
  44. return nil
  45. }))
  46. }
  47. func buildConn() (mock sqlmock.Sqlmock) {
  48. connManager.GetResource(mockedDatasource, func() (io.Closer, error) {
  49. var db *sql.DB
  50. var err error
  51. db, mock, err = sqlmock.New()
  52. return &pingedDB{
  53. DB: db,
  54. }, err
  55. })
  56. return
  57. }