四虎影院网址多少
栏目分类
热点资讯
桃花影院

你的位置:四虎影院网址多少 > 桃花影院 > 桃花影院 Go Fiber 框架之测试行使

桃花影院 Go Fiber 框架之测试行使

发布日期:2021-10-13 19:58    点击次数:91

行家益,吾是 polarisxu。汤姆高清免费观看视频

实际项现在中,行家频繁不会对 Web API 写单元测试。Go 标准库不光有 testing 包声援清淡单元测试,还有 net/http/httptest 包声援 HTTP 的测试。

本文固然是测试 Fiber 行使程序,但对其他的框架也适用。

01 如何测试

Web API 的单元测试如何进走?

本节介绍的测试手段主要是验证乞求返回的 HTTP 状态码是否相符预期。

倘若返回的状态码是 200 OK,那么外示这个测试用例成功(Pass),倘若返回的状态码是 404 Not Found,那么外示这个测试用例战败(Fail)。于是,请求乞求返回精确的状态码。

02 VSCode 生成测试

VSCode 安设了 Go Team 的 Go 插件后桃花影院,能够一键生成单元测试。

在某个函数上右键,展现的菜单中会有 Generate Unit Tests For Function:

点击它会自动创建 main_test.go 文件,并生成相通下面的代码:

package main  import "testing"  func Test_main(t *testing.T) {  tests := []struct {   name string  }{   // TODO: Add test cases.  }  for _, tt := range tests {   t.Run(tt.name, func(t *testing.T) {    main()   })  } } 
03 脱手写单元测试

脱手之前,必要先介绍下 Fiber 中特意针对测试挑供的手段:

// Test is used for internal debugging by passing a *http.Request. // Timeout is optional and defaults to 1s, -1 will disable it completely. func (app *App) Test(req *http.Request, msTimeout ...int) (resp *http.Response, err error) 

该手段授与一个 *http.Request,返回 *http.Response,经历这个 Response 能够获得 HTTP StatusCode。

待测试的程序如下:

// main.go package main  import (  "github.com/gofiber/fiber/v2" )  func setupRoutes(app *fiber.App) {  app.Get("/hello", func(ctx *fiber.Ctx) error {   return ctx.SendString("Hello World!")  }) }  func main() {  app := fiber.New()  setupRoutes(app)  app.Listen(":3000") } 

测试程序如下:

package main  import (  "net/http/httptest"  "testing"   "github.com/gofiber/fiber/v2"  "github.com/stretchr/testify/assert" )  func TestHelloRoute(t *testing.T) {  tests := []struct {   description  string   route        string // route path to test   expectedCode int    // expected HTTP status code  }{   {    description:  "get HTTP status 200",    route:        "/hello",    expectedCode: 200,   },   {    description:  "get HTTP status 404, when route is not exists",    route:        "/notfound",    expectedCode: 404,   },  }   app := fiber.New()   setupRoutes(app)   for _, test := range tests {   // 行使 httptest 包生成 request   req := httptest.NewRequest("GET", test.route, nil)   resp, _ := app.Test(req, 1)   assert.Equalf(t, test.expectedCode, resp.StatusCode, test.description)  } } 

吾们还用了 github.com/stretchr/testify 库,这是一个辅助测试的库,assert 是它的子包,用于进走断言。

然后运走如下命令测试:

$ go test -v . === RUN   TestHelloRoute --- PASS: TestHelloRoute (0.00s) PASS ok   github.com/polaris1119/fiber-example 
04 总结

本文从 HTTP 状态码的维度测试 Web API,保证 API 大的逻辑精确,但不包括营业逻辑有关的测试。

本文转载自微信公多号「polarisxu」,能够经历以下二维码关注。转载本文请有关polarisxu公多号。

【编辑选举】桃花影院

鸿蒙官方战略配相符共建——HarmonyOS技术社区 Golang 说话怎么编写测试代码? 几个秒杀 Go 官方库的第三方开源库 为什么 Go 说话把类型放在后面? Goroutine 存在的意义是什么? Google Chrome正在修整行使率矮下的标签页堆叠功能

友情链接:

Powered by 四虎影院网址多少 @2013-2021 RSS地图 HTML地图