Golang - 使用文件系统进行测试并达到100% [英] Golang - Testing with filesystem and reaching 100%
问题描述
然而,我不知道如何做到这一点,而不是反对系统(函数指针等)。
我试图做类似的东西,但我不能达到100%,因为真实的功能:
$ p $ var fs fileSystem = osFS { }
$ b $ type b fileSystem interface {
打开(name string)(file,error)
Stat(name string)(os.FileInfo,error)
}
类型文件接口{
io.Closer
io.Reader
io.ReaderAt
io.Seeker
Stat()(os.FileInfo,错误)
}
// osFS使用本地磁盘实现fileSystem。
类型osfs结构{b
$ b func(osfs)打开(name string)(file,error){return os.Open(name)}
func(osFS)Stat(名称字符串)(os.FileInfo,error){return os.Stat(name)}
https://talks.golang.org/2012/10things.slide#8 )
有人会有建议吗? :)
谢谢!
我试图做同样的事情,只是为了尝试。我通过引用所有系统文件调用作为接口并使方法接受接口来实现它。然后,如果没有提供接口,则使用系统方法。我是全新的Go,所以我不确定是否违反了最佳做法。
importio / ioutil
类型ReadFile函数(字符串)([]字节,错误)
类型FileLoader接口{
LoadPath )[] byte
}
//使用默认的ioutil.ReadFile
//初始化LocalFileSystemLoader作为读取文件的方法。可以允许调用者提供
//自己的ReadFile进行测试。
func NewLocalFileSystemLoader(rffn ReadFile)* localFileSystemLoader {
var rf ReadFile = ioutil.ReadFile
if rffn!= nil {
rf = rffn
}
return& localFileSystemLoader {
ReadFileFn:rf}
}
类型localFileSystemLoader struct {
ReadFileFn ReadFile
}
func(lfsl * localFileSystemLoader)LoadPath(path string)[] byte {
dat,err:= lfsl.ReadFileFn(path)
if err!= nil {
panic(err )
}
return dat
}
I'm trying to test one of my package to reach 100%. However, I can't find how I can do this without being "against the system" (functions pointers, etc.).
I tried to do something similar to this, but I can't reach 100% because of "real" functions :
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) }
(From https://talks.golang.org/2012/10things.slide#8)
Does someone would have a suggestion ? :) Thanks !
I attempted to do same thing, just to try it. I achieved it by referencing all system file calls as interfaces and having method accept an interface. Then if no interface was provided the system method was used. I am brand new to Go, so I'm not sure if it violates best practices or not.
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
}
这篇关于Golang - 使用文件系统进行测试并达到100%的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!