2016-06-11 37 views
3

我试图测试一个包以达到100%。 但是,我无法找到如何做到这一点,而不是“反对系统”(函数指针等)。Golang - 使用文件系统进行测试并达到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

是否有人将有一个建议? :) 谢谢!

+3

不要瞄准100%。 – Volker

+0

我可以做到这一点,但我觉得很奇怪,系统还没有解决这个问题...... – Lerenn

+3

达到100%的覆盖率并不是一个值得解决的“问题”。 – Volker

回答

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 
} 
相关问题