如何测试我的NewClient
构造函数是否适用于我的Client
结构?在Go中测试构造函数
package busybus
import (
"bufio"
"net"
)
type Client struct {
counter integer
conn net.Conn
bufin *bufio.Reader
bufout *bufio.Writer
messages chan string
state string
}
func NewClient(conn net.Conn, messages chan string) *Client {
return &Client{
counter: 0,
conn: conn,
bufin: bufio.NewReader(conn),
bufout: bufio.NewWriter(conn),
messages: messages,
state: "waiting",
}
}
我尝试了一些测试是这样的:
package busybus
import (
"net"
"testing"
)
func TestNewClient(t *testing.T) {
ln, _ := net.Listen("tcp", ":65535")
conn, _ := ln.Accept()
messages := make(chan string)
client := NewClient(conn, messages)
if client.conn != conn {
t.Errorf("NewClient(%q, %q).conn == %q, want %q", conn, messages, client.conn, conn)
}
}
但由于ln.Accept
在试运行期间该挂起,这似乎是一个完全错误的做法反正...任何建议如何测试这个构造?
感谢您对读者的建议。除此之外,我不同意。当然,这是一个简单的构造函数,由于它的简单性,它甚至不是必需的,但是当我有一些更复杂的初始化过程时,我想首先检查它,而不是稍后搜索我的验收测试失败的原因。你写了一个虚拟连接,你的意思是简单地满足net.Conn接口吗? – astropanic
@astropanic:你写过“但当我有一些更复杂的初始化过程”:目前你没有它。为什么现在打扰一些可能从未发生过的事情?你的构造函数只返回一个填充的结构体。只是测试一下。在测试中不需要迷恋。 – Volker