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.
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 }
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) }
Untuk ujian, buat pelaksanaan olok-olok antara muka Jam.
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.
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.
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!