首先,让我告诉我,我已经看到了与这个类似的其他问题,但我认为没有一个问题能真正详细地回答它(How do one test net.Conn in unit tests in Golang?和How does Golang 单元测试中的一个测试 net.Conn?)。
我要测试的是以某种方式响应 TCP 请求的功能。
在最简单的情况下:
func HandleMessage(c net.Conn) {
s, err := bufio.NewReader(c).ReadString('\n')
s = strings.Trim(s, "\n")
c.Write([]byte(s + " whatever"))
}
我将如何对这样的功能进行单元测试,理想情况下使用net.Pipe()不打开实际连接。我一直在尝试这样的事情:
func TestHandleMessage(t *testing.T) {
server, client := net.Pipe()
go func(){
server.Write([]byte("test"))
server.Close()
}()
s, err := bufio.NewReader(c).ReadString('\n')
assert.Nil(t, err)
assert.Equal(t, "test whatever", s)
}
但是我似乎无法理解在哪里放置HandleMessage(client)(或HandleMessage(server)?在测试中实际获得我想要的响应。我可以让它阻塞并且根本不会完成,或者它将返回我在服务器中编写的完全相同的字符串。
有人可以帮助我并指出我在哪里犯了错误吗?或者在测试 TCP 功能时可能指向正确的方向。
森栏
一只萌萌小番薯
收到一只叮咚
随时随地看视频慕课网APP
相关分类