36

Go アプリが基礎となる OS に発行するすべての書き込み/読み取りをログに記録し、(可能であれば) FS をメモリにのみ存在するものに完全に置き換えたいと考えています。

出来ますか?どのように?たぶん、すぐに使えるソリューションがありますか?

4

4 に答える 4

44

これは、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、デフォルトのファイルシステムを指定することができます)。

于 2013-05-24T19:43:54.187 に答える
31

テスト中にファイルシステムをモックアウトする問題を解決したい場合は、@spf13 の Afero ライブラリ、https: //github.com/spf13/afero をチェックしてください。受け入れられた回答が行うすべてのことを行いますが、より良いドキュメントと例があります。

于 2016-06-24T16:32:52.040 に答える
10

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")
}

https://godocs.io/testing/fstest

于 2021-04-08T21:44:05.340 に答える
1

この問題についてグーグルで検索すると、この質問がかなり高くポップアップするからです。

読み取りと書き込みのログ記録についてはわかりませんが、メモリ内にのみ存在するファイルシステムの場合、blang/vfsを見つけました。私は本番環境では使用していませんが、アルファ版であり、インターフェイスが変更される可能性が高いと書かれています。ご自身の責任で使用してください。

読み取りと書き込みをログに記録するように実装できると思います。

于 2016-02-12T13:30:43.430 に答える