登录
首页 >  Golang >  Go问答

编写有效的单元测试用例,测试 Gorilla Websocket

来源:stackoverflow

时间:2024-02-07 16:00:24 277浏览 收藏

golang学习网今天将给大家带来《编写有效的单元测试用例,测试 Gorilla Websocket》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我需要为 gorilla web-socket 编写单元测试用例。

var upgrader = websocket.Upgrader{} // use default options
 
func socketHandler(w http.ResponseWriter, r *http.Request) {
    // Upgrade our raw HTTP connection to a websocket based one
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Print("Error during connection upgradation:", err)
        return
    }
    defer conn.Close()
 
    // The event loop
    for {
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            log.Println("Error during message reading:", err)
            break
        }
        log.Printf("Received: %s", message)
        err = conn.WriteMessage(messageType, message)
        if err != nil {
            log.Println("Error during message writing:", err)
            break
        }
    }
}
 
func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Index Page")
}
 
func main() {
    http.HandleFunc("/socket", socketHandler)
    http.HandleFunc("/", home)
    log.Fatal(http.ListenAndServe("localhost:8080", nil))
}

我想为 sockethandler 函数编写单元测试用例。我该怎么办?


正确答案


使用 websocket 端点启动 httptest.Server。使用 websocket 客户端拨打服务器。根据需要发送和接收消息。

这是一个简单的例子:

func TestWs(t *testing.T) {
    s := httptest.NewServer(http.HandlerFunc(socketHandler))
    defer s.Close()
    wsURL := "ws" + strings.TrimPrefix(s.URL, "http")
    c, _, err := websocket.DefaultDialer.Dial(wsURL, nil)
    if err != nil {
        t.Error(err)
    }
    defer c.Close()

    // Write a message.
    c.WriteMessage(websocket.TextMessage, []byte("hello"))

    // Expect the server to echo the message back.
    c.SetReadDeadline(time.Now().Add(time.Second * 2))
    mt, msg, err := c.ReadMessage()
    if err != nil {
        t.Error(err)
    }
    if mt != websocket.TextMessage || string(msg) != "hello" {
        t.Errorf("expected text hello, got %d: %s", mt, msg)
    }
}

Run the example on the playground

要测试客户端,请编写一个服务器端点,该端点根据测试需要发送和接收消息。如上所示,针对端点运行客户端代码。

今天关于《编写有效的单元测试用例,测试 Gorilla Websocket》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>