zvvq技术分享网

golang框架如何进行错误测试?(golang gin框架面试

作者:zvvq博客网
导读go 框架提供多种错误测试工具:errors.is:用于比较错误,返回布尔值指示一个错误是否是另一个错误的原因。reflect.deepequal:对于自定义错误类型,可帮助比较错误详细信息,返回布尔

go 框架提供多种错误测试工具:errors.is:用于比较错误,返回布尔值指示一个错误是否是另一个错误的原因。reflect.deepequal:对于自定义错误类型,可帮助比较错误详细信息,返回布尔值指示两个值是否相等。实战案例:通过一个使用 gin 框架中介件的测试用例,展示了如何编写全面的错误测试,确保错误得到正确处理。

内容来自samhan666

内容来自zvvq,别采集哟

Go 框架中的错误测试

内容来自zvvq

错误测试对于确保应用程序可靠且稳定至关重要。Go 框架通过提供多种工具和技术来简化和方便错误测试过程。

内容来自samhan

使用 errors.Is

zvvq好,好zvvq

”; copyright zvvq

Golang 中的 errors.Is 函数可用于比较错误。它返回一个布尔值,表示第一个错误是否是第二个错误的原因。以下是其用法示例: 内容来自zvvq

1

copyright zvvq

2

本文来自zvvq

3 本文来自zvvq

4

本文来自zvvq

5

内容来自samhan666

6 zvvq好,好zvvq

7

内容来自zvvq,别采集哟

8

内容来自zvvq,别采集哟

9

zvvq好,好zvvq

10

内容来自zvvq,别采集哟

11

copyright zvvq

12

内容来自zvvq

13

内容来自samhan666

14 zvvq.cn

package main

zvvq好,好zvvq

import (

zvvq好,好zvvq

"errors"

内容来自zvvq,别采集哟

"fmt"

copyright zvvq

)

内容来自samhan

func main() { zvvq好,好zvvq

err := errors.New("original error")

内容来自zvvq

wrappedErr := fmt.Errorf("wrapped error: %w", err) // 包裹原始错误 zvvq好,好zvvq

if errors.Is(wrappedErr, err) {

内容来自zvvq

fmt.Println("原始错误与包裹错误相同")

zvvq.cn

} zvvq.cn

} zvvq.cn

使用 reflect.DeepEqual 内容来自samhan666

对于自定义错误类型,reflect.DeepEqual 函数可以帮助比较错误的详细信息。它返回一个布尔值,表示两个值是否相等。以下是其用法示例: zvvq好,好zvvq

1

zvvq.cn

2

内容来自zvvq

3

内容来自zvvq

4 zvvq.cn

5

本文来自zvvq

6 内容来自samhan666

7

内容来自samhan666

8

zvvq好,好zvvq

9

内容来自zvvq,别采集哟

10 zvvq.cn

11

本文来自zvvq

12

zvvq.cn

13

本文来自zvvq

14 zvvq

15 zvvq.cn

16

内容来自zvvq,别采集哟

17

内容来自zvvq,别采集哟

18 copyright zvvq

19

内容来自zvvq,别采集哟

package main 内容来自zvvq

import ( 内容来自samhan

"fmt" 本文来自zvvq

"reflect"

zvvq.cn

) zvvq

type MyError struct {

zvvq好,好zvvq

Code    int zvvq

Message string

内容来自samhan

}

内容来自zvvq,别采集哟

func main() { 本文来自zvvq

err1 := MyError{100, "First error"} zvvq

err2 := MyError{100, "First error"} copyright zvvq

if reflect.DeepEqual(err1, err2) { 内容来自samhan666

fmt.Println("错误详细信息相同")

zvvq.cn

}

内容来自samhan666

}

内容来自samhan666

实战案例

内容来自samhan666

让我们考虑一个使用 Gin 框架编写的中介件的测试用例: zvvq

1

zvvq.cn

2

zvvq好,好zvvq

3

zvvq好,好zvvq

4

内容来自samhan666

5 zvvq

6 copyright zvvq

7

内容来自zvvq

8 zvvq好,好zvvq

9

内容来自samhan

10 内容来自zvvq,别采集哟

11

本文来自zvvq

12 内容来自samhan666

13 内容来自samhan

14

内容来自zvvq

15

内容来自zvvq

16

copyright zvvq

17

内容来自zvvq,别采集哟

18 本文来自zvvq

19 zvvq

20 内容来自samhan

21

内容来自samhan666

22

zvvq好,好zvvq

23 本文来自zvvq

24

本文来自zvvq

25

内容来自samhan

26 本文来自zvvq

27 内容来自samhan666

28

内容来自zvvq,别采集哟

29 内容来自samhan

30 zvvq好,好zvvq

31

copyright zvvq

32

copyright zvvq

33

zvvq

34 zvvq.cn

35

内容来自zvvq

36

zvvq.cn

37 内容来自zvvq,别采集哟

38

copyright zvvq

39 copyright zvvq

40

内容来自samhan

41

内容来自samhan

42

本文来自zvvq

import (

copyright zvvq

"net/http" 内容来自zvvq,别采集哟

"net/http/httptest" 内容来自zvvq

"testing"

zvvq.cn

"<a style=color:f60; text-decoration:underline; href="https://www.zvvq.cn/zt/15841.html" target="_blank">git</a>hub.com/gin-gonic/gin"

copyright zvvq

)

copyright zvvq

// FooMiddleware 是一个示例中介件,模拟检查请求头 本文来自zvvq

func FooMiddleware(c gin.Context) {

copyright zvvq

token := c.GetHeader("Authorization") zvvq好,好zvvq

if token == "" {

内容来自zvvq,别采集哟

c.AbortWithError(http.StatusUnauthorized, errors.New("缺少授权头")) 内容来自zvvq,别采集哟

}

内容来自zvvq,别采集哟

c.Next()

zvvq

}

内容来自samhan666

// TestFooMiddleware 测试 FooMiddleware 是否正确检查授权头 内容来自samhan666

func TestFooMiddleware(t testing.T) { copyright zvvq

// 使用 httptest 创建模拟请求 内容来自samhan

req, _ := http.NewRequest("GET", "/", nil) 内容来自samhan666

req.Header.Set("Authorization", "") // 没有授权头 zvvq.cn

// 创建 Gin 路由器并注册我们想要测试的中介件 zvvq

router := gin.New() 内容来自zvvq,别采集哟

router.Use(FooMiddleware) zvvq

w := httptest.NewRecorder() // 记录响应

内容来自samhan666

// 处理请求 zvvq

router.ServeHTTP(w, req) zvvq好,好zvvq

// 检查响应状态是否为 401(未经授权) copyright zvvq

if w.Code != http.StatusUnauthorized {

内容来自zvvq

t.Errorf("预期状态码为 401,但得到 %d", w.Code)

zvvq.cn

} 内容来自zvvq,别采集哟

// 检查响应体中是否包含正确的错误消息

本文来自zvvq

if w.Body.String() != "缺少授权头" {

zvvq

t.Errorf("预期错误消息为 \"缺少授权头\",但得到 %s", w.Body.String()) copyright zvvq

} 内容来自zvvq

} zvvq.cn

通过这些技术,您可以编写全面的错误测试,确保错误在您的 Go 应用程序中得到正确处理。 本文来自zvvq

以上就是golang框架如何进行错误测试?的详细内容,更多请关注其它相关文章!

zvvq好,好zvvq