Fungsi ujian unit yang berinteraksi dengan sistem fail selalunya memerlukan mengejek sistem fail untuk menyediakan input terkawal dan mengesahkan yang dijangkakan output.
Untuk mengejek sistem fail, tentukan antara muka, Sistem fail, yang mengisytiharkan kaedah untuk operasi fail seperti membuka dan mengakses maklumat fail dan mencipta jenis konkrit, osFS, yang melaksanakan antara muka ini untuk interaksi sistem fail sebenar.
Sebagai contoh, pertimbangkan getSize(rentetan nama), yang mengembalikan saiz fail diberi namanya menggunakan fs.Stat(nama) untuk maklumat fail.
Dalam kod ujian, gantikan pembolehubah fs global dengan mockedFS yang diperolok-olokkan yang diwarisi daripada FileSystem dan menyediakan tingkah laku terkawal . Anda boleh menentukan sama ada ralat perlu dilaporkan dan saiz yang akan dikembalikan oleh Stat.
Gunakan mockedFS untuk menguji senario yang berbeza, seperti pelaporan ralat dan pengambilan saiz.
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) } }
Dengan mencipta antara muka sistem fail yang dipermainkan, anda boleh mengawal gelagat interaksi sistem fail semasa ujian unit, membolehkan anda menguji kod yang bergantung pada operasi sistem fail secara menyeluruh.
Atas ialah kandungan terperinci Bagaimana untuk Mengejek Interaksi Sistem Fail dengan Berkesan untuk Ujian Unit Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!