Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Berkesan Kod Ujian Unit Bergantung pada `DateTime.Now`?

Bagaimana untuk Berkesan Kod Ujian Unit Bergantung pada `DateTime.Now`?

Patricia Arquette
Patricia Arquetteasal
2025-01-12 06:36:42315semak imbas

How to Effectively Unit Test Code Dependent on `DateTime.Now`?

Mengasingkan Kebergantungan Masa dalam Ujian Unit

Kod ujian bergantung pada DateTime.Now memberikan cabaran yang unik. Menguji secara langsung terhadap jam sistem memperkenalkan ketidakstabilan dan menjadikan ujian kurang dipercayai. Berikut ialah dua pendekatan berkesan untuk mengurus pergantungan ini:

Pendekatan 1: Suntikan Ketergantungan

Kaedah pilihan adalah untuk mengabstrakkan pergantungan masa. Buat antara muka (cth., ITimeProvider) mentakrifkan kaedah untuk mendapatkan masa semasa. Laksanakan antara muka ini dengan kelas konkrit (cth., SystemTimeProvider) yang menggunakan DateTime.Now. Suntikan antara muka ini ke dalam kelas anda yang memerlukan masa semasa.

Semasa ujian unit, anda boleh menyuntik olok-olok ITimeProvider yang mengembalikan nilai DateTime yang telah ditetapkan. Ini memberi anda kawalan sepenuhnya ke atas masa yang digunakan dalam ujian anda tanpa menjejaskan jam sistem.

Pendekatan 2: Konteks Ambien (dengan Berhati-hati)

Pilihan lain melibatkan penggunaan konteks statik. Buat kelas asas (cth., TimeProvider) dengan sifat Current statik yang memegang penyedia masa aktif. Pelaksanaan lalai (cth., SystemTimeProvider) boleh ditetapkan pada mulanya.

Untuk ujian, ganti sifat Current statik untuk menggunakan penyedia olok-olok. Amat penting, ingat untuk menetapkan semula sifat Current kepada lalai selepas setiap ujian untuk mengelakkan tingkah laku yang tidak dijangka dalam ujian berikutnya. Pendekatan ini memerlukan pembersihan yang teliti untuk mengelakkan gangguan ujian.

Ringkasan

Kedua-dua kaedah membenarkan pengasingan kebergantungan masa yang berkesan dalam ujian unit anda. Walau bagaimanapun, suntikan pergantungan biasanya lebih disukai kerana reka bentuknya yang lebih bersih dan mengurangkan risiko kesan sampingan yang tidak diingini berbanding menggunakan konteks ambien statik.

Atas ialah kandungan terperinci Bagaimana untuk Berkesan Kod Ujian Unit Bergantung pada `DateTime.Now`?. 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