命令记不住

登陆

单元测试

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

4.阅读《任洪彩-GO专家编程》- 测试章节

推荐阅读