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

标签 unit-testing go filesystems

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

相关文章:

unit-testing - 单元测试失败消息的推荐标准?

unit-testing - BDD 是否应该通过单元测试、集成测试或两者都自动化?

go - 解密不稳定,有时会得到密码:消息身份验证失败

go - 用可变参数创建谓词

linux - 如何在不格式化的情况下缩小 ext4 分区?

javascript - 如何使用 Intel XDK 应用程序访问文件系统?

c++ - 可以吗在 Google 测试框架内的 TDD 周期中使用全局数据进行多个测试?

sql - 使用单元测试项目进行CLR SQL存储过程测试

regex - 用于验证长度的正则表达式

directory - 如何在Lua中创建目录?