2016-06-11 125 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 
} 
相關問題