Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengejek Interaksi Sistem Fail dengan Berkesan untuk Ujian Unit Go?

Bagaimana untuk Mengejek Interaksi Sistem Fail dengan Berkesan untuk Ujian Unit Go?

Mary-Kate Olsen
Lepaskan: 2024-12-16 20:30:12
asal
227 orang telah melayarinya

How to Effectively Mock Filesystem Interactions for Go Unit Testing?

Pengujian Sistem Fail Diejek dalam Go

Pengenalan

Fungsi ujian unit yang berinteraksi dengan sistem fail selalunya memerlukan mengejek sistem fail untuk menyediakan input terkawal dan mengesahkan yang dijangkakan output.

Butiran Pelaksanaan

Antara Muka dan Fail Diejek Jenis

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.

Fungsi Ujian

Sebagai contoh, pertimbangkan getSize(rentetan nama), yang mengembalikan saiz fail diberi namanya menggunakan fs.Stat(nama) untuk maklumat fail.

Persediaan Sistem Fail Diejek

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.

Kod Ujian

Gunakan mockedFS untuk menguji senario yang berbeza, seperti pelaporan ralat dan pengambilan saiz.

Contoh Ujian Kod

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)
    }
}
Salin selepas log masuk

Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan