. , - . : https://github.com/jordwest/mock-conn
Ivan , , TCP- , , . :
Server | Client
---------+---------
reads <=== writes
writes ===> reads
, , , .
, MockConn ReadWriteCloser . Read, Write Close .
type MockConn struct {
ServerReader *io.PipeReader
ServerWriter *io.PipeWriter
ClientReader *io.PipeReader
ClientWriter *io.PipeWriter
}
func (c MockConn) Close() error {
if err := c.ServerWriter.Close(); err != nil {
return err
}
if err := c.ServerReader.Close(); err != nil {
return err
}
return nil
}
func (c MockConn) Read(data []byte) (n int, err error) { return c.ServerReader.Read(data) }
func (c MockConn) Write(data []byte) (n int, err error) { return c.ServerWriter.Write(data) }
func NewMockConn() MockConn {
serverRead, clientWrite := io.Pipe()
clientRead, serverWrite := io.Pipe()
return MockConn{
ServerReader: serverRead,
ServerWriter: serverWrite,
ClientReader: clientRead,
ClientWriter: clientWrite,
}
}
"", MockConn , net.Conn (, , ReadWriteCloser, LocalAddr() .., net.Conn)
, ClientReader ClientWriter :
func TestTalkToServer(t *testing.T) {
fmt.Fprintf(mockConn.ClientWriter, "Hello from client!\n")
rd := bufio.NewReader(mockConn.ClientReader)
line, err := rd.ReadString('\n')
if line != "Hello from server!" {
t.Errorf("Server response not as expected: %s\n", line)
}
}