Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengejek DateTime.Now dengan Berkesan dalam Ujian Unit?

Bagaimanakah Saya Boleh Mengejek DateTime.Now dengan Berkesan dalam Ujian Unit?

Barbara Streisand
Barbara Streisandasal
2025-01-12 09:50:43885semak imbas

How Can I Effectively Mock DateTime.Now in Unit Tests?

Ujian unit: mengatasi DateTime.Kini dalam olok-olok

Ujian unit selalunya bergantung pada cap waktu tertentu, tetapi mengubah suai masa sistem mungkin tidak sesuai. Artikel ini meneroka strategi berkesan untuk mengejek DateTime.Now.

Abstraksi dan suntikan

Pendekatan pilihan adalah untuk merangkum masa semasa dalam abstraksi (cth. TimeProvider) dan menyuntiknya ke dalam pengguna. Ini membolehkan anda menggantikan TimeProvider yang dipermainkan semasa ujian sambil mengekalkan pelaksanaan asal untuk kegunaan pengeluaran.

Konteks persekitaran

Sebagai alternatif, anda boleh menentukan abstraksi masa sebagai konteks persekitaran, yang membolehkan anda mengubah suai masa semasa tanpa mengubah suai masa sistem secara langsung. Berikut ialah contoh pelaksanaan konteks persekitaran:

<code>public abstract class TimeProvider
{
    private static TimeProvider current = DefaultTimeProvider.Instance;

    public static TimeProvider Current
    {
        get { return current; }
        set { current = value; }
    }

    public abstract DateTime UtcNow { get; }
}</code>

Dalam konteks ini, TimeProvider.Current mewakili masa semasa. Untuk menggunakannya dalam ujian, anda boleh menggantikan TimeProvider.Current dengan objek olok-olok:

<code>using Moq;

var timeMock = new Mock<TimeProvider>();
timeMock.SetupGet(tp => tp.UtcNow).Returns(new DateTime(2010, 3, 11));
TimeProvider.Current = timeMock.Object;</code>

Ini membolehkan ujian unit menetapkan cap waktu tertentu tanpa menjejaskan kod pengeluaran. Walau bagaimanapun, adalah penting untuk diingat untuk menetapkan semula pembekal masa kepada keadaan lalai selepas setiap ujian.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek DateTime.Now dengan Berkesan dalam Ujian Unit?. 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