Golang - 使用文件系统进行测试并达到100% [英] Golang - Testing with filesystem and reaching 100%

查看:170
本文介绍了Golang - 使用文件系统进行测试并达到100%的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图测试一个包,达到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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆