本当にただのメモ

なるべく Qiita に投稿しよう

io.ReadCloser を mock する

io.ReadCloser を引数にとる関数のテストを書きたかった。

結論、 bytes.Bufferioutil.NopCloser を組み合わせれば良い。

package main

import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
)

func main() {
    read(
        ioutil.NopCloser(bytes.NewBufferString("This is content")),
    )
}

func read(rc io.ReadCloser) {
    defer rc.Close()

    b, err := ioutil.ReadAll(rc)
    if err != nil {
        panic(err.Error())
    }

    fmt.Println(string(b)) //=> This is content
}

See Also

I/O を伴うテストには bytes.Buffer が便利 - Qiita