gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:15:19 27 4
gpt4 key购买 nike

我正在尝试测试我的一个包裹以达到 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)

有人有什么建议吗? :)谢谢!

最佳答案

我试图做同样的事情,只是为了尝试一下。我通过将所有系统文件调用引用为接口(interface)并让方法接受接口(interface)来实现它。然后,如果没有提供接口(interface),则使用系统方法。我是 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
}

关于unit-testing - Golang - 使用文件系统进行测试并达到 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com