Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menghentikan `time.Now()` dengan berkesan untuk Ujian Unit Golang?

Bagaimana untuk Menghentikan `time.Now()` dengan berkesan untuk Ujian Unit Golang?

Susan Sarandon
Lepaskan: 2025-01-01 00:00:12
asal
591 orang telah melayarinya

How to Effectively Stub Out `time.Now()` for Golang Unit Tests?

Cara Menghentikan Masa Secara Global.Now() untuk Ujian Unit

Dalam aplikasi sensitif masa, mengejek masa semasa dengan tepat boleh menjadi penting untuk ujian unit. Walau bagaimanapun, time.Now() sering digunakan di berbilang lokasi, menjadikannya mencabar untuk menjejak masa berlalu dengan tepat.

Menggunakan Antara Muka Tersuai

Penyelesaian yang dicadangkan dalam utas kacang golang yang anda rujuk menyediakan pendekatan yang kukuh dengan mentakrifkan antara muka Jam tersuai yang membungkus kefungsian pakej masa:

type Clock interface {
  Now() time.Time
  After(d time.Duration) <-chan time.Time
}
Salin selepas log masuk

Anda boleh melaksanakan antara muka ini dengan pelaksanaan konkrit seperti ini:

type realClock struct{}
func (realClock) Now() time.Time { return time.Now() }
func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }
Salin selepas log masuk

Untuk ujian, buat pelaksanaan olok-olok antara muka Jam.

Mengendalikan Perubahan Masa Sistem

Sementara itu mungkin kelihatan menggoda untuk menukar masa sistem secara global untuk ujian, pendekatan ini sangat tidak digalakkan. Ia boleh memperkenalkan kebergantungan dan kesan sampingan yang tidak dapat diramalkan.

Pakej Masa Tersuai

Sebagai alternatif, pertimbangkan untuk membuat pakej masa tersuai yang membungkus pakej masa perpustakaan standard. Pakej tersuai ini boleh menyediakan fungsi untuk beralih kepada pelaksanaan masa olok-olok semasa ujian.

Amalan Terbaik untuk Kod Sensitif Masa

Untuk meningkatkan kebolehujian dan mengurangkan kesan sampingan, berusaha untuk mereka bentuk kod anda dengan komponen tanpa negara sebanyak mungkin. Dengan menstrukturkan kod anda kepada bahagian yang berasingan dan boleh diuji, anda memudahkan proses ujian unit dan memudahkan untuk memastikan tingkah laku yang betul dalam keadaan masa yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Menghentikan `time.Now()` dengan berkesan untuk Ujian Unit Golang?. 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