相关疑难解决方法(0)

如何为 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
查看次数

在Golang中制作模拟gin.Context

我正在使用Gin框架编写REST API.但我在测试我的控制器和研究TDD和Mock时遇到了麻烦.我尝试将TDD和Mock应用于我的代码,但我不能.

我创建了一个非常简化的测试环境,并尝试创建一个控制器测试.如何为Gin.Context创建模拟?

这是我的示例代码:

package main

import (
    "strconv"
    "github.com/gin-gonic/gin"
)

// MODELS
type Users []User
type User struct {
    Name string `json"name"`
}


func main() {
    r := gin.Default()

    r.GET("/users", GetUsers)
    r.GET("/users/:id", GetUser)

    r.Run(":8080")
}

// ROUTES
func GetUsers(c *gin.Context) {
    repo := UserRepository{}
    ctrl := UserController{}

    ctrl.GetAll(c, repo)
}

func GetUser(c *gin.Context) {
    repo := UserRepository{}
    ctrl := UserController{}

    ctrl.Get(c, repo)
}

// CONTROLLER
type UserController struct{}

func (ctrl UserController) GetAll(c *gin.Context, repository UserRepositoryIterface) {
    c.JSON(200, repository.GetAll())
} …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing mocking go go-gin

7
推荐指数
4
解决办法
8145
查看次数

标签 统计

go ×2

go-gin ×2

unit-testing ×2

go-sqlmock ×1

mocking ×1

testing ×1