标签: go-sqlmock

sqlmock 与查询不匹配,但查询相同且日志输出显示相同

我正在尝试使用 sqlmock 使用 Gorm 为某些代码编写测试。我想出为我的插入功能编写测试,但现在我正在努力让更新工作。

工作流的第一部分只是从数据库中查询记录。即使日志输出显示它们相同,我也无法让它与我的 SQL 匹配。

这是错误消息:

(/path/to/my/project/database.go:263)
[2020-01-08 10:29:40]  Query: could not match actual sql: "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1" with expected regexp "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1"
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 ExpectQuery 的 ExpectExec 插入。

    for _, c := range cases {

        db, mock, err := sqlmock.New()
        if err != nil {
            t.Fatal(err) …
Run Code Online (Sandbox Code Playgroud)

go go-gorm go-sqlmock

13
推荐指数
2
解决办法
8626
查看次数

如何为 BindJSON 设置模拟 gin.Context

我正在设置测试Go

我用go-sqlmockGo Gin 作为框架来测试 mysql 连接。现在我尝试测试mysql插入逻辑。

问题是我需要设置稍后gin.Context使用的模拟BindJSON。但到目前为止
我还不能设置这个。gin.Context

server side: golang
db: mysql
web framework: gin
Run Code Online (Sandbox Code Playgroud)

道戈

server side: golang
db: mysql
web framework: gin
Run Code Online (Sandbox Code Playgroud)

dao_test.go

unc PostImageToDBDao(c *gin.Context, db *sql.DB) {
        // Because of this logic, I need to set gin.Context with json
    var imageData util.ImageData
    c.BindJSON(&imageData)

    for _, imageName := range imageData.IMAGENAMES {
        ins, err := db.Prepare("INSERT INTO images(article_uuid, image_name) VALUES(?,?)")
        if err != nil {
            log.Fatal(err)
        }
        ins.Exec(imageData.ARTICLEUUID, …
Run Code Online (Sandbox Code Playgroud)

unit-testing go go-gin go-sqlmock

13
推荐指数
1
解决办法
7090
查看次数

如何正确设置go-sqlmock的Mock Row和Query

我正在设置测试golang
我用来go-sqlmock测试mysql连接。
但是sqlmock.NewRowsmock.ExpectQuery不能很好地处理错误。
我想知道如何解决这个错误。

server side: golang
db: mysql
web framework: gin
Run Code Online (Sandbox Code Playgroud)

道戈

server side: golang
db: mysql
web framework: gin
Run Code Online (Sandbox Code Playgroud)

dao_test.go

func GetSingleArticleDao(c *gin.Context, db *sql.DB) (util.Article, *sql.Rows) {
    id := c.Params.ByName("id")
    article := util.Article{}
    errArticle := db.QueryRow("SELECT * FROM articles WHERE id = ?", id).Scan(&article.ID, &article.UUID, &article.TITLE, &article.CONTENT)
    if errArticle != nil {
        panic(errArticle.Error())
    }
    rows, errImage := db.Query("SELECT image_name FROM images WHERE article_uuid  = ?", article.UUID)
    if errImage != …
Run Code Online (Sandbox Code Playgroud)

mysql unit-testing go go-gin go-sqlmock

6
推荐指数
1
解决办法
2万
查看次数

单元测试 sqlmock 因 sql 更新而失败

我们一直在使用 sqlmock 测试使用 select 的 func() - 没有问题。

它不适用于更新。

我们要测试的功能是:

func PutTag(tag *Tag) error {
...
    err = db.DB.Where("id=?", tag.Id).Save(tag).Error
...
}
Run Code Online (Sandbox Code Playgroud)

我们这样定义测试函数:

func (s *Suite) TestPutTag() {
    tag := Tag{Id: 2, Name: "Test Tag 2"}
    s.mock.ExpectBegin()
    s.mock.ExpectQuery("UPDATE `tags` SET `name` = ?  WHERE `tags`.`id` = ? AND ((id=?))").
        WithArgs(tag.Name, tag.Id, tag.Id)
    s.mock.ExpectCommit()
    err := PutTag(&tag)
    require.NoError(s.T(), err)
}
Run Code Online (Sandbox Code Playgroud)

这是回归..

[2019-08-30 14:36:36]  call to ExecQuery 'UPDATE `tags` SET `name` = ?  WHERE `tags`.`id` = ? AND ((id=?))' with args [{Name: …
Run Code Online (Sandbox Code Playgroud)

mysql unit-testing go go-gorm go-sqlmock

6
推荐指数
0
解决办法
1822
查看次数

如何使用 go-sql (postgres) 模拟 gorm 插入

我将Gorm与 postgresql 驱动程序一起使用。我尝试使用go-sqlmock模拟数据库插入:

type Test struct {
    FirstName string `json:"first_name"`
}

func (db *DB) CreateTest() (*Test, error) {
    test := Test{"c"}
    if result := db.Create(&test); result.Error != nil {
        return nil, result.Error
    }

    return &test, nil
}


func TestCreateUser(t *testing.T) {
    _, mock, _ := sqlmock.NewWithDSN("sqlmock_db_0")

    mockedGorm, _ := gorm.Open("sqlmock", "sqlmock_db_0")
    defer mockedGorm.Close()
    myDB := &DB{mockedGorm}

    mock.ExpectExec("INSERT INTO test").WithArgs("c").WillReturnResult(sqlmock.NewResult(1, 1))
    myDB.Exec("INSERT INTO test(first_name) VALUES (?)", "c")


    if _, err := myDB.CreateTest(); err != nil {
        t.Errorf("error …
Run Code Online (Sandbox Code Playgroud)

testing go go-gorm go-sqlmock

6
推荐指数
1
解决办法
6343
查看次数

Go 单元测试 - 调用数据库事务开始,出现意外错误

我正在尝试使用 Data Doggo-sqlmock和.Go 编写模型单元测试testify

我有以下代码:

type Suite struct {
    suite.Suite
    DB *gorm.DB
    mock sqlmock.Sqlmock

    repository      Repository
    user *models.User
}

func (s *Suite) SetupSuite() {
    var (
        db  *sql.DB
        err error
    )

    db, s.mock, err = sqlmock.New()
    require.NoError(s.T(), err)

    s.DB, err = gorm.Open("mysql", db)
    require.NoError(s.T(), err)

    s.DB.LogMode(true)

    s.repository = CreateRepository(s.DB)
}

func (s *Suite) AfterTest(_, _ string) {
    require.NoError(s.T(), s.mock.ExpectationsWereMet())
}

func TestInit(t *testing.T) {
    suite.Run(t, new(Suite))
}

func (s *Suite) Test_repository_Get() {
    var (
        ID        = …
Run Code Online (Sandbox Code Playgroud)

go testify go-gorm go-sqlmock

4
推荐指数
1
解决办法
2万
查看次数

使用 go-sqlmock 模拟 gorm“更新”时出现“无法匹配实际 sql”错误?

存储库.go

\n\n
func (repo *Repository) Update(info *model.Requests) error{\n   if info == nil{\n      return nil\n   }\n   columnChanges := map[string]interface{}{\n      status:       \xe2\x80\x9ccompleted",\n   }\n   if err := repo.db.Table(\xe2\x80\x9crequests").Model(info).Where(fmt.Sprintf("%s = ? AND  %s = ? AND %s = ? AND %s = ?",\n      requestID, systemID, requestType, status),info.RequestID, info.SystemID, info.RequestType,\xe2\x80\x9dprogress").Updates(columnChanges).Error; err != nil {\n      return err\n   }\n   return nil\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

嘲笑

\n\n

存储库_test.go

\n\n
func TestRepository_Update(t *testing.T) {\n   type testData struct {\n      input     *model.Requests\n      queryString string\n      queryArgs   []driver.Value\n      updateErr   error\n      hasErr    bool\n   }\n\n   db, mock, …
Run Code Online (Sandbox Code Playgroud)

go go-gorm go-sqlmock

2
推荐指数
1
解决办法
4975
查看次数

SQLMock 和 Gorm:模拟 Postgres 插入

当我尝试使用 SQLMock 和 Gorm.io 模拟 Postgres 插入时,我收到一条错误,指出该查询不是预期的。我尝试使用regexp.QuoteMeta()换行和转义字符串,但它不起作用。我添加并删除了 args 和 result,但错误仍然出现

如何通过 SQLMock 设置预期的查询?

我给你原始的 PostgresQuery 和 UserModel

//RAW QUERY
INSERT INTO "users" ("id","name","surname","birthdate","company","custom_claims","deleted") VALUES ($1,$2,$3,$4,$5,$6,$7)' with args [{Name: Ordinal:1 Value:my_user_id} {Name: Ordinal:2 Value:<nil>} {Name: Ordinal:3 Value:<nil>} {Name: Ordinal:4 Value:<nil>} {Name: Ordinal:5 Value:<nil>} {Name: Ordinal:6 Value:<nil>} {Name: Ordinal:7 Value:<nil>}]
Run Code Online (Sandbox Code Playgroud)
//Gorm model
type User struct {
    ID           string `gorm:"primaryKey"`
    Name         *string
    Surname      *string
    Birthdate    *time.Time
    Company      *string
    CustomClaims *json.RawMessage
    Deleted      gorm.DeletedAt
}

func (repository Repository) CreateUser(user users.User) (*users.User, error) { …
Run Code Online (Sandbox Code Playgroud)

go go-gorm go-sqlmock

2
推荐指数
1
解决办法
3377
查看次数

标签 统计

go ×8

go-sqlmock ×8

go-gorm ×6

unit-testing ×3

go-gin ×2

mysql ×2

testify ×1

testing ×1