Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menghentikan `time.Now()` Secara Berkesan Secara Global untuk Ujian dalam Go?

Bagaimanakah Saya Boleh Menghentikan `time.Now()` Secara Berkesan Secara Global untuk Ujian dalam Go?

Barbara Streisand
Lepaskan: 2025-01-01 06:16:10
asal
297 orang telah melayarinya

How Can I Effectively Stub Out `time.Now()` Globally for Testing in Go?

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

Kelebihan Pakej Tersuai

  • Skop Global: Pendekatan ini menghentikan masa.Now() untuk semua contoh pakej masa dalam skop ujian.
  • Mudah Menogol: Bertukar antara masa sebenar dan masa olok-olok adalah mudah menggunakan fungsi SetMockTime dan ResetMockTime.
  • Kebolehselenggaraan: Mengekalkan pakej masa yang berasingan untuk tujuan ujian meningkatkan organisasi kod.

Keburukan Adat Pakej

  • Abstraksi Tambahan: Boleh memperkenalkan sedikit overhead disebabkan lapisan tambahan abstraksi.

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!

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