小编Wil*_*zzi的帖子

在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 中将错误数组转换为 JSON

我有一系列错误(错误类型),但是当我尝试以 JSON 格式返回客户端时,它到达时为空。

它是这样创建的:

var (
    ErrEmptyName = errors.New("Nome não pode ser vázio")
    ErrInvalidType = errors.New("Tipo de pessoa inválido")
)

func (p Person) Validate() []error {

    var errors []error

    if govalidator.IsNull(p.Name) {
        errors = append(errors, ErrEmptyName)
    }

    if p.Type != "F" && p.Type != "J" {
        errors = append(errors, ErrInvalidType)
    }

    return errors
)
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

err := person.Validate()
c.JSON(422, gin.H{"errors" : err})
Run Code Online (Sandbox Code Playgroud)

我的输出:

{"errors":"[{}]"}
Run Code Online (Sandbox Code Playgroud)

arrays error-handling json go

5
推荐指数
2
解决办法
3959
查看次数

标签 统计

go ×2

arrays ×1

error-handling ×1

go-gin ×1

json ×1

mocking ×1

testing ×1

unit-testing ×1