Rumah >pembangunan bahagian belakang >C++ >Bagaimana Saya Boleh Berkesan Kod Ujian Unit Bergantung pada DateTime.Now?
Cabaran dan strategi untuk ujian unit yang bergantung pada DateTime.Now
Kod ujian unit yang bergantung pada masa semasa selalunya rumit kerana nilai DateTime.Now berubah secara dinamik. Menukar masa sistem secara manual tidak digalakkan, jadi penyelesaian yang cekap diperlukan.
Amalan terbaik ialah mengasingkan abstraksi masa semasa dan menyuntiknya ke dalam pengguna. Dengan cara ini, masa boleh dimanipulasi dalam ujian unit tanpa menjejaskan sistem asas.
Pendekatan lain ialah mentakrifkan abstraksi masa sebagai konteks persekitaran. Pendekatan ini melibatkan mencipta kelas statik yang menyediakan akses kepada masa semasa dan membenarkan menggantikannya dengan objek olok-olok semasa ujian.
Coretan kod berikut mentakrifkan TimeProvider sebagai konteks persekitaran:
<code class="language-csharp">public abstract class TimeProvider { private static TimeProvider current = DefaultTimeProvider.Instance; public static TimeProvider Current { get { return TimeProvider.current; } set { if (value == null) { throw new ArgumentNullException("value"); } TimeProvider.current = value; } } public abstract DateTime UtcNow { get; } public static void ResetToDefault() { TimeProvider.current = DefaultTimeProvider.Instance; } }</code>
Penyedia Masa digunakan seperti berikut:
<code class="language-csharp">var now = TimeProvider.Current.UtcNow;</code>
Dalam ujian unit, TimeProvider.Current boleh digantikan dengan objek olok-olok:
<code class="language-csharp">var timeMock = new Mock<TimeProvider>(); timeMock.SetupGet(tp => tp.UtcNow).Returns(new DateTime(2010, 3, 11)); TimeProvider.Current = timeMock.Object;</code>
Sentiasa ingat untuk menetapkan semula TimeProvider kepada keadaan lalai selepas setiap ujian. Ini memastikan bahawa ujian unit berikutnya tidak dipengaruhi oleh abstraksi temporal yang diubah.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Berkesan Kod Ujian Unit Bergantung pada DateTime.Now?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!