Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghentikan `time.Now()` secara Global untuk Ujian yang Lebih Mudah?

Bagaimana untuk Menghentikan `time.Now()` secara Global untuk Ujian yang Lebih Mudah?

Linda Hamilton
Linda Hamiltonasal
2025-01-01 03:38:16466semak imbas

How to Globally Stub Out `time.Now()` for Easier Testing?

Cara Menghentikan Masa.Now() Globally for Testing

Dalam pengekodan, sesetengah elemen mungkin sensitif masa, memerlukan manipulasi masa untuk tujuan ujian. Satu kaedah adalah untuk menghentikan masa.Now() dalam ujian. Walau bagaimanapun, time.Now() kerap digunakan, memerlukan penyelenggaraan pembolehubah untuk memantau masa tidur berlalu sebenar.

Artikel ini mengkaji pendekatan alternatif untuk menghentikan masa secara global.Now(), termasuk penggunaan antara muka tersuai dan kemungkinan mencipta pakej "masa" yang diubah suai.

Antara Muka Tersuai Pendekatan

Kaedah antara muka tersuai melibatkan pelaksanaan antara muka yang serupa dengan yang berikut:

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

Antara muka ini menyediakan ruang letak untuk kaedah Now() dan After(), membenarkan anda untuk menentukan pelaksanaan khusus untuk ujian dan pengeluaran. Contohnya:

type realClock struct{}

func (realClock) Now() time.Time { return time.Now() }
func (realClock) After(d time.Duration) <-chan time.Time { return time.After(d) }

Isu Berpotensi

Walaupun pendekatan antara muka tersuai berkesan, ia disertakan dengan beberapa kaveat:

  • Melalui pembolehubah antara muka: Anda mungkin perlu menghantar antara muka jam sebagai parameter kepada fungsi dan kaedah yang gunakan masa.Now().
  • Tiada penggantian global: Kaedah ini tidak menyediakan penggantian global untuk masa.Now().

Pendekatan Alternatif

  • Mengubah suai Pakej "masa": Anda boleh membuat pakej "masa" yang diubah suai yang membungkus pakej masa perpustakaan standard dan menyediakan mekanisme untuk bertukar kepada pustaka masa olok-olok untuk ujian.
  • Reka Bentuk Kod Tanpa Status: Untuk mengelakkan sisi kesan dan memudahkan ujian, pertimbangkan untuk mereka bentuk kod anda dengan stateless komponen.

Awas:

Menukar masa sistem semasa menjalankan ujian atau secara amnya tidak disyorkan kerana ia boleh membawa kepada kebergantungan yang tidak dijangka dan isu penyahpepijatan.

Kesimpulan

Stubbing time.Now() secara global untuk ujian memerlukan pertimbangan yang teliti. Walaupun pendekatan antara muka tersuai adalah pilihan yang berdaya maju, ia mungkin memperkenalkan kerumitan tambahan. Sebagai alternatif, anda boleh membuat pakej "masa" yang diubah suai atau mereka bentuk kod anda dengan komponen tanpa kewarganegaraan untuk memudahkan ujian.

Atas ialah kandungan terperinci Bagaimana untuk Menghentikan `time.Now()` secara Global untuk Ujian yang Lebih Mudah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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