2016-06-11 3 views
3

100 %에 도달하기 위해 패키지 중 하나를 테스트하려고합니다. 그러나 "시스템에 대해"(함수 포인터 등)없이이 작업을 수행 할 수있는 방법을 찾을 수 없습니다. Golang - 파일 시스템으로 테스트하여 100 %에 도달

나는 이와 비슷한 뭔가를 시도,하지만 난 때문에 "진짜"기능의 100 %에 도달 할 수 없습니다 :

(https://talks.golang.org/2012/10things.slide#8에서)

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) } 

누군가가 제안을했을 하는가를? :) 감사!

+3

100 %를 목표로하지 마십시오. – Volker

+0

나는 그것을 할 수 있었지만 시스템이이 문제를 해결하기 위해 만들어지지 않았다는 것이 이상하다는 것을 알게되었다 ... – Lerenn

+3

100 % 라인 범위에 도달하는 것은 해결할 가치가있는 "문제"가 아니다. – Volker

답변

0

나는 그것을 시도하기 위해 똑같은 일을 시도했다. 나는 모든 시스템 파일 호출을 인터페이스로 참조하고 메소드가 인터페이스를 받아들이도록함으로써 그것을 달성했다. 그런 다음 인터페이스가 제공되지 않으면 시스템 메소드가 사용되었습니다. 나는 Go to brand를 처음 사용하기 때문에 베스트 프랙티스에 위배되는지 확실하지 않습니다.

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 
} 
관련 문제