Tercihim, zamanı kullanan sınıflara sahip olmaktır, örneğin
interface IClock
{
DateTime Now { get; }
}
Somut bir uygulama ile
class SystemClock: IClock
{
DateTime Now { get { return DateTime.Now; } }
}
Daha sonra isterseniz, test etmek için istediğiniz diğer herhangi bir saati sağlayabilirsiniz.
class StaticClock: IClock
{
DateTime Now { get { return new DateTime(2008, 09, 3, 9, 6, 13); } }
}
Saatin kendisine dayanan sınıfa sağlanmasında bazı ek yükler olabilir, ancak bu, herhangi bir sayıda bağımlılık enjeksiyon çözümüyle (bir Kontrolün Tersine Çevirme konteyneri, düz eski yapıcı / ayarlayıcı enjeksiyonu veya hatta bir Statik Ağ Geçidi Modeli kullanılarak) idare edilebilir. ).
İstenen süreleri sağlayan bir nesneyi veya yöntemi sunmanın diğer mekanizmaları da işe yarıyor, ancak bence önemli olan sistem saatini sıfırlamaktan kaçınmak, çünkü bu sadece diğer seviyelerde ağrıya neden olacak.
Ayrıca, DateTime.Now
bunu kullanmak ve hesaplamalarınıza dahil etmek sadece doğru hissettirmez - belirli zamanları test etme yeteneğinizi elinizden alır, örneğin, yalnızca gece yarısı sınırının yakınında veya Salı günleri meydana gelen bir hata keşfederseniz. Geçerli zamanı kullanmak, bu senaryoları test etmenize izin vermez. Ya da en azından ne zaman istersen.