Go でのファイルシステムのモック化と抽象化
質問:
I/O を監視することは可能ですか?基盤となるファイルシステム上で Go アプリケーションによって実行される操作?さらに、物理ファイルシステムをメモリ内の対応するものに置き換えることはできますか?
答え:
はい、Go でファイルシステムを抽象化してモックすることができます。 Andrew Gerrand の洞察に触発されたアプローチは次のとおりです。
重要なファイル システム操作を表すファイル システム インターフェイスを定義します。
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 タイプを実装します。ディスク:
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 インターフェイスを引数として渡すか、ラッパー タイプ内に埋め込みます:
func myFunc(fs fileSystem) { f, err := fs.Open("my_file.txt") ... }
メモリ内ファイル システムを使用するには、 fileSystem インターフェイスを実装し、ファイルを内部データ構造に保存する MemoryFS タイプ。これにより、モック ファイルシステムの使用中にすべての I/O イベントをインターセプトしてログに記録できるようになります:
type memoryFS struct { files map[string][]byte } func (mfs memoryFS) Open(name string) (file, error) { ... } func (mfs memoryFS) Stat(name string) (os.FileInfo, error) { ... }
以上がGo アプリケーションはファイルシステムの I/O 操作をモックまたは監視できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。