與檔案系統互動的單元測試函數通常需要模擬檔案系統以提供受控輸入並驗證預期輸出。
要模擬檔案系統,請定義一個介面fileSystem,它聲明檔案操作(如開啟和存取檔案資訊)的方法,並建立一個具體類型osFS,它實作該介面以進行實際的檔案系統互動。
舉個例子,考慮 getSize(name string),它傳回給定名稱的檔案的大小fs.Stat(name) 以取得檔案資訊。
在測試程式碼中,將全域 fs 變數替換為繼承自 fileSystem 並提供受控行為的模擬mockedFS。您可以指定是否報告錯誤以及Stat傳回的大小。
使用mockedFS測試不同的場景,例如錯誤報告和大小檢索。
type mockedFS struct { osFS reportErr bool reportSize int64 } func (m mockedFS) Stat(name string) (os.FileInfo, error) { if m.reportErr { return nil, os.ErrNotExist } return mockedFileInfo{size: m.reportSize}, nil } func TestGetSize(t *testing.T) { oldFs := fs mfs := &mockedFS{} fs = mfs defer func() { fs = oldFs }() mfs.reportErr = true if _, err := getSize("hello.go"); err == nil { t.Error("Expected error, but err is nil!") } mfs.reportErr = false mfs.reportSize = 123 if size, err := getSize("hello.go"); err != nil { t.Errorf("Expected no error, got: %v", err) } else if size != 123 { t.Errorf("Expected size %d, got: %d", 123, size) } }
透過建立一個模擬檔案系統接口,您可以在單元測試期間控製檔案系統互動的行為,從而允許您徹底測試依賴檔案系統操作的程式碼。
以上是如何有效模擬檔案系統互動以進行 Go 單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!