我正在使用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) 我有一系列错误(错误类型),但是当我尝试以 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)