【问题标题】:How to write unit test for googollee socket.io handlers如何为 googollee socket.io 处理程序编写单元测试
【发布时间】:2021-10-17 17:16:36
【问题描述】:

我正在使用 go lib:github.com/googollee/go-socket.io 我想知道如何为连接事件编写一个非常简单的测试,例如,如果我想检查没有返回错误。

package main

import (
    "fmt"
    "log"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
)

func main() {
    server := socketio.NewServer(nil)

    server.OnConnect("/", func(s socketio.Conn) error {
        s.SetContext("")
        fmt.Println("connected:", s.ID())
        return nil
    })
}

【问题讨论】:

  • 这个测试不应该是 github.com/googollee/go-socket.io 本身的一部分,而不是用户空间代码吗?
  • 上面的代码只是一个例子,如果我在处理程序内部有自己的业务逻辑,例如数据库操作,或者返回其他值。
  • 创建一个单独的函数,它将socketio.Conn 接口作为参数,并将其传递给server.OnConnect 而不是匿名函数。然后你可以模拟 socketio.Conn 来对你的函数进行单元测试。
  • 能否提供一些代码 sn-p 帮助我理解,不胜感激。
  • 在下面添加了示例 sn-p。

标签: unit-testing go socket.io


【解决方案1】:

创建一个将 socketio.Conn 接口作为参数的单独函数,并将其传递给 server.OnConnect 而不是匿名函数。

然后你可以模拟 socketio.Conn 来对你的函数进行单元测试。

例如,将您的代码 sn-p 更改为:

package main

import (
    "fmt"
    "log"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
)

func main() {
    server := socketio.NewServer(nil)

    server.OnConnect("/", handleOnConnect)
}

func handleOnConnect(s socketio.Conn) error {
    s.SetContext("")
    fmt.Println("connected:", s.ID())
    return nil
}

现在,您所要做的就是测试handleOnConnect。因为socketio.Conn是一个接口,你可以创建一个mock来测试这个功能,而不用担心socketio的内部结构。

您还可以根据您的用例创建一个新接口,它是socketio.Conn 的子集,以使模拟更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多