github.com/lingyao2333/mo-zero@v1.4.1/core/stores/sqlx/sqlconn_test.go (about)

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