【问题标题】:Golang - Testing with filesystem and reaching 100%Golang - 使用文件系统进行测试并达到 100%
【发布时间】:2016-06-11 17:29:43
【问题描述】:

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

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

【问题讨论】:

  • 不要瞄准 100%。
  • 我可以这样做,但我觉得奇怪的是系统还没有解决这个问题......
  • 达到 100% 的线路覆盖率并不是一个值得解决的“问题”。
  • 所以我会忽略它。谢谢你的建议:)

标签: unit-testing go filesystems


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2011-01-15
    • 2017-10-10
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多