Golang - 使用文件系统进行测试并达到100%

时间:2016-06-11 17:29:44

标签: unit-testing go filesystems

我试图测试我的一个套餐达到100%。 但是,我无法在没有"反对系统的情况下找到我能做到的事情。 (函数指针等)。

我尝试做类似的事情,但由于"真实"我无法达到100%。功能:

var fs fileSystem = osFS{}

type fileSystem interface {
    Open(name string) (file, error)
    Stat(name string) (os.FileInfo, error)
}

type file interface {
    io.Closer
    io.Reader
    io.ReaderAt
    io.Seeker
    Stat() (os.FileInfo, error)
}

// osFS implements fileSystem using the local disk.
type osFS struct{}

func (osFS) Open(name string) (file, error)        { return os.Open(name) }
func (osFS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) }

(来自https://talks.golang.org/2012/10things.slide#8

有人会有建议吗? :) 谢谢!

1 个答案:

答案 0 :(得分:0)

我试图做同样的事情,只是为了尝试。我通过将所有系统文件调用作为接口引用并且让方法接受接口来实现它。然后,如果没有提供接口,则使用系统方法。我是Go的新手,所以我不确定它是否违反了最佳做法。

import "io/ioutil"


type ReadFile func (string) ([]byte, error)


type FileLoader interface {
    LoadPath(path string) []byte
}

// Initializes a LocalFileSystemLoader with default ioutil.ReadFile
// as the method to read file.  Optionally allows caller to provide
// their own ReadFile for testing.
func NewLocalFileSystemLoader(rffn ReadFile) *localFileSystemLoader{
    var rf ReadFile = ioutil.ReadFile

    if rffn != nil {
        rf = rffn
    }
    return &localFileSystemLoader{
        ReadFileFn: rf}
}

type localFileSystemLoader struct {
    ReadFileFn ReadFile
}

func (lfsl *localFileSystemLoader) LoadPath(path string) []byte {
    dat, err := lfsl.ReadFileFn(path)
    if err != nil {
        panic(err)
    }

    return dat
}