can*_*nni 24 filesystems mocking go
我希望能够将我的应用程序发布的每个写入/读取记录到底层操作系统,并且(如果可能的话)将FS完全替换为仅驻留在内存中的FS.
可能吗?怎么样?也许有一个随时可用的解决方案?
Fre*_*Foo 35
这是直接来自安德鲁·格兰德的10件事你可能不知道Go:
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) }
Run Code Online (Sandbox Code Playgroud)
为此,您需要编写代码以获取fileSystem参数(可能将其嵌入到其他类型中,或者nil表示默认文件系统).
小智 22
您可以使用该testing/fstest包:
package main
import "testing/fstest"
func main() {
fs := fstest.MapFS{
"hello.txt": {
Data: []byte("hello, world"),
},
}
data, err := fs.ReadFile("hello.txt")
if err != nil {
panic(err)
}
println(string(data) == "hello, world")
}
Run Code Online (Sandbox Code Playgroud)
https://godocs.io/testing/fstest
Rya*_*lls 20
对于那些希望在测试期间解决模拟文件系统问题的人来说,请查看@spf13的Afero库,https://github.com/spf13/afero.它完成了所接受的答案所做的一切,但有更好的文档和示例.