Stubbing Out time.Now() Globally: Exploring Alternatives
Dalam kod ujian yang bergantung pada fungsi sensitif masa, keperluan timbul untuk mensimulasikan perkembangan masa. Walaupun melaksanakan antara muka masa tersuai boleh menjadi penyelesaian yang berkesan, penggunaannya boleh menjadi menyusahkan kerana keperluan untuk memindahkan pembolehubah untuk menjejak masa berlalu sebenar.
Pakej Masa Tersuai
Sebagai alternatif, pertimbangkan untuk membuat pakej masa tersuai yang merangkumi pakej masa perpustakaan standard. Pendekatan ini membolehkan anda bertukar dengan lancar antara pelaksanaan masa nyata dan pelaksanaan olok-olok untuk ujian. Contohnya:
// custom_time.go package custom_time import ( "time" "sync" ) var ( mockTime time.Time mockMutex sync.Mutex ) func SetMockTime(t time.Time) { mockMutex.Lock() mockTime = t mockMutex.Unlock() } func ResetMockTime() { mockMutex.Lock() mockTime = time.Time{} mockMutex.Unlock() } func Now() time.Time { mockMutex.Lock() defer mockMutex.Unlock() if mockTime != (time.Time{}) { return mockTime } return time.Now() }
Kelebihan Pakej Tersuai
Keburukan Adat Pakej
Awas Terhadap Sistem Pengubahsuaian Jam
Adalah dinasihatkan supaya tidak mengubah suai jam sistem semasa ujian untuk mensimulasikan perkembangan masa. Ini boleh membawa kepada akibat yang tidak dapat diramalkan untuk komponen sistem lain yang bergantung pada masa sistem yang tepat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghentikan `time.Now()` Secara Berkesan Secara Global untuk Ujian dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!