
web单元测试
1.测试项目初建
单元测试是项目不能缺少的模块,也是保障项目可以正常运行的重要依赖。下面就对 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() }完成了项目测试的初步建立
2.创建单元测试
建立 test 目录, golang 的单元测试都是以 _test 结尾,建立 index_test.go 文件
package test import ( "gin_demo/nodetext/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
3.运行单元测试
运行单元测试,控制台打印出单元测试结果。
- PASS: TestIndexGetRouter (0.05s) PASS
C:\Users\vSphere\go\src\gin_demo\nodetext\test>go test [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET / --> gin_demo/nodetext/initRouter.SetupRouter.func1 (3 handlers) [GIN] 2020/06/25 - 22:00:15 |?[97;42m 200 ?[0m| 0s | |?[97;44m GET ?[0m "/" PASS ok gin_demo/nodetext/test 0.108s