在Go的io.Reader上测试EOF可以通过以下步骤进行:
type MyReader struct {
data []byte
pos int
}
func (r *MyReader) Read(p []byte) (n int, err error) {
if r.pos >= len(r.data) {
return 0, io.EOF
}
n = copy(p, r.data[r.pos:])
r.pos += n
return n, nil
}
import (
"bytes"
"testing"
)
func TestMyReader_Read(t *testing.T) {
data := []byte("Hello, World!")
reader := &MyReader{data: data}
buf := make([]byte, len(data))
n, err := reader.Read(buf)
if err != nil {
t.Errorf("Read returned an error: %v", err)
}
if n != len(data) {
t.Errorf("Read returned %d bytes, expected %d bytes", n, len(data))
}
if !bytes.Equal(buf, data) {
t.Errorf("Read returned incorrect data: %s", buf)
}
n, err = reader.Read(buf)
if err != io.EOF {
t.Errorf("Read did not return EOF")
}
if n != 0 {
t.Errorf("Read returned %d bytes, expected 0 bytes", n)
}
}
在上述测试函数中,首先创建了一个包含测试数据的自定义Reader对象。然后,使用Read方法从Reader对象中读取数据,并将其存储在buf切片中。接下来,使用断言语句检查读取的数据是否与预期的数据相等。最后,再次调用Read方法,检查是否返回了io.EOF错误。
这样,就可以在Go的io.Reader上测试EOF了。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云