Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menguji unit Go WebSocket?

Bagaimana untuk menguji unit Go WebSocket?

WBOY
WBOYasal
2024-06-01 22:16:001188semak imbas

Ujian unit Go WebSocket boleh mengesahkan ketepatan dan keteguhan pelayan WebSocket. Pasang rangka kerja ujian Ginkgo dan Gomega. Buat dan mulakan pelayan WebSocket. Menulis ujian unit: Mewujudkan sambungan WebSocket. Hantar dan terima mesej. Sahkan respons. Jalankan ujian untuk mengesahkan kefungsian pelayan.

Go WebSocket 如何进行单元测试?

Go Panduan Pengujian Unit WebSocket

WebSocket ialah protokol rangkaian yang mewujudkan sambungan berterusan dua hala antara pelanggan dan pelayan. Dalam Go, [gorilla/websocket](https://godoc.org/github.com/gorilla/websocket) ialah perpustakaan popular untuk mencipta dan mengendalikan sambungan WebSocket. Ujian unit adalah penting semasa menulis pelayan WebSocket kerana ia mengesahkan ketepatan dan keteguhan kod. Artikel ini akan menyediakan panduan langkah demi langkah untuk menguji unit Go WebSocket menggunakan Ginkgo dan Gomega, dengan contoh praktikal.

Langkah 1: Pasang rangka kerja ujian

Gunakan Modul Go untuk mengurus kebergantungan, pasang Ginkgo dan Gomega dengan arahan berikut:

go get -u github.com/onsi/ginkgo/v2
go get -u github.com/onsi/gomega

Langkah 2: Cipta pelayan WebSocket

dan tulis modul GoC baru Pelayan WebSocket yang ringkas, sebagai contoh:

package main

import (
    "github.com/gorilla/websocket"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
        if err != nil {
            log.Println(err)
            http.Error(w, "Internal Server Error", http.StatusInternalServerError)
            return
        }
        log.Printf("WebSocket connection established")

        // Handle incoming messages and send responses...
    })

    log.Println("Listening on port 8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Println(err)
    }
}

Langkah 3: Tulis ujian unit

Gunakan rangka kerja Ginkgo dan Gomega untuk menulis ujian unit, contohnya:

package main_test

import (
    "bytes"
    "net/http"
    "net/http/httptest"
    "testing"

    "github.com/gorilla/websocket"
    "github.com/onsi/ginkgo/v2"
    "github.com/onsi/gomega"
)

var _ = ginkgo.Describe("WebSocket Server", func() {        
    var (
        ts         *httptest.Server
        clientConn *websocket.Conn
    )
    
    ginkgo.BeforeEach(func() {
        ts = httptest.NewServer(http.HandlerFunc(wsHandler))
        var err error    
        clientConn, _, err = websocket.DefaultDialer.Dial(ts.URL, nil)
        gomega.Expect(err).To(gomega.BeNil())
    })
    
    ginkgo.AfterEach(func() {
        ts.Close()
        clientConn.Close()
    })
    
    ginkgo.It("should establish a WebSocket connection", func() {
        gomega.Expect(clientConn).NotTo(gomega.BeNil())
    })
    
    ginkgo.It("should send and receive messages", func() {
        // Send a message to the server
        err := clientConn.WriteMessage(websocket.TextMessage, []byte("Hello WebSocket!"))
        gomega.Expect(err).To(gomega.BeNil())

        // Read the response from the server
        _, msg, err := clientConn.ReadMessage()
        gomega.Expect(err).To(gomega.BeNil())

        // Verify the response 
        gomega.Expect(string(msg)).To(gomega.Equal("Hello Client!"))
    })
})

Kes praktikal

Contoh penggunaan Gingo ini dan Gomega menguji kefungsian asas pelayan WebSocket untuk mewujudkan sambungan dan menghantar/menerima mesej. Anda boleh melanjutkan ujian ini untuk mengesahkan kes penggunaan lain, seperti pengesahan, had sambungan atau pengendalian ralat.

Nota:

    Pastikan anda memulakan pelayan WebSocket sebelum menjalankan ujian.
  • Laraskan URL dan port WebSocket agar sepadan dengan tetapan pelayan sebenar.

Atas ialah kandungan terperinci Bagaimana untuk menguji unit Go WebSocket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn