[英]How to mock/abstract filesystem in go?
我希望能夠記錄我的 go 應用程序向底層操作系統發出的每次寫入/讀取,並且(如果可能)將 FS 完全替換為僅駐留在內存中的 FS。
是否有可能? 如何? 也許有現成的解決方案?
這直接來自 Andrew Gerrand 的關於 Go 的你(可能)不知道的10 件事:
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) }
為此,您需要編寫代碼以獲取fileSystem
參數(可能將其嵌入其他類型,或者讓nil
表示默認文件系統)。
對於那些希望在測試期間解決模擬文件系統問題的人,請查看 @spf13 的 Afero 庫, https://github.com/spf13/afero 。 它完成了公認答案所做的一切,但提供了更好的文檔和示例。
您可以使用testing/fstest
包:
package main
import "testing/fstest"
func main() {
m := fstest.MapFS{
"hello.txt": {
Data: []byte("hello, world"),
},
}
b, e := m.ReadFile("hello.txt")
if e != nil {
panic(e)
}
println(string(b) == "hello, world")
}
僅僅因為在谷歌搜索這個問題時這個問題彈出的頻率很高:
我不知道記錄讀取和寫入,但是對於僅駐留在內存中的文件系統,我發現了blang/vfs 。 我沒有在生產中使用過,它說它是 alpha 並且接口可能會改變。 需要您自擔風險使用它。
我想你可以實現它來記錄讀取和寫入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.