七叶笔记 » golang编程 » Go – Gin框架 – 单元测试

Go – Gin框架 – 单元测试

单元测试是项目不能缺少的模块,也是保障项目可以正常运行的重要依赖。下面就对 Gin 进行单元测试。

为了方便单元测试,我们首先要对我们的项目进行一下抽取。

新建立一个文件夹叫做 initRouter

建立 go 文件 initRouter.go

 package initRouter

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func SetupRouter() *gin.Engine {
    router := gin.Default()
    // 添加 Get 请求路由
    router.GET("/", func(context *gin.Context) {
        context.String(http.StatusOK, "hello gin")
    })
    return router
}  

入口文件main.go

 package main

import (
    "GinHello/initRouter"
)

func main() {
    router := initRouter.SetupRouter()
    _ = router.Run()
}  

完成了项目测试的初步建立。

建立 test 目录, golang 的单元测试都是以 _test 结尾,建立 index_test.go 文件。

 package test

import (
    "GinHello/initRouter"
    "github.com/stretchr/testify/assert"
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestIndexGetRouter(t *testing.T) {
    router := initRouter.SetupRouter()
    w := httptest.NewRecorder()
    req, _ := http.NewRequest(http.MethodGet, "/", nil)
    router.ServeHTTP(w, req)
    assert.Equal(t, http.StatusOK, w.Code)
    assert.Equal(t, "hello gin", w.Body.String())
}  

通过 assert 进行断言,来判断返回状态码和返回值是否与代码中的值一致。

此时的项目目录为:

 GinHello
|
|-initRouter
|  |-initRouter.go
|
|-test
|  |-index_test.go
|
|-main.go
|-go.mod
|-go.sum  

运行单元测试,控制台打印出单元测试结果。

 --- PASS: TestIndexGetRouter (0.02s)
PASS  

相关文章