如何測試我的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