.NET 8.0'da yeni [17]: Times ile testler için zaman saldırısı

Womanne

Member
Temel Sınıf Kütüphanesinde, Soyut Sınıfla Microsoft .NET 8.0 TimeProvider Testlerin bir parçası olarak saat dilimi de dahil olmak üzere basit bir olasılık tamamlandı, zamansal bilgi.








Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.







Kullanımı yerine şu an için bir soyutlama System.DateTime.Now,, System.DateTime.UtcNow VE System.DateTimeOffset.Now Birçok geliştirici zaten yazmıştır, çünkü saat veya tarihe bağlı program kodu için gerçek birim testleri soyutlama gerektirir. Aksi takdirde, testleri başlatmak için belirli bir saate veya tarihe kadar beklemelisiniz.

Microsoft şimdi .NET 8.0'da yapım aşamasında bir soyutlama sunmaktadır. Ayrıca zaman bilgileri Task.Delay() VE Task.Async() Üzerine düşebilir.

Aşağıdaki listede çeşitli yönleri göstermektedir:

  • TimeProvider.System Bir tane teslim TimeProvider Sistem saatine dayanan gerçek zamanlı.
  • FakeTimeProvider Nuget Microsoft.extensi.timeVrovider.testing paketinde teslim edilen bir Microsoft sınıfıdır. Bu sınıf, manuel olarak kullanılabilen sabit bir zaman spesifikasyonuna izin verir Advance() Spesifikasyon ile TimeSpanÖrneğin -nesne veya okuma tanıtılabilir fakeTime.AutoAdvanceAmount = TimeSpan.FromHours(1).

class FCL_TimeProvider
{

public async Task Run()
{
void PrintTime(TimeProvider timeProvider)
{
Console.Write("Lokale Zeit: " + timeProvider.GetLocalNow());
Console.WriteLine(" | UTC: " + timeProvider.GetUtcNow());
}

void Callback(TimeProvider timeProvider)
{
Console.WriteLine("Time mit " + timeProvider.GetType());
PrintTime(timeProvider);
}

CUI.H2("Reguläre Systemzeit");
PrintTime(TimeProvider.System);

// https://www.nuget.org/packages/
// Microsoft.Extensions.TimeProvider.Testing/
CUI.H2("Vorgetäuschte Zeit Time-Provider aus “+
“Microsoft.Extensions.TimeProvider.Testing");
var fakeTime = new
FakeTimeProvider(new(DateTime.Parse("14.11.2023 18:00:00")));
PrintTime(fakeTime); // 14.11.2023 18 Uhr
Console.WriteLine("Wir stellen die Zeit nun 30 Minuten vor");
fakeTime.Advance(TimeSpan.FromMinutes(30));
// 14.11.2023 18:30 Uhr:
Console.WriteLine("UTC: " + fakeTime.GetUtcNow());
Console.WriteLine("Wir stellen die Zeit bei jedem Lesen " +
"der Zeit 1 Stunde vor");
fakeTime.AutoAdvanceAmount = TimeSpan.FromHours(1);
// 14.11.2023 19:30 Uhr:
Console.WriteLine("UTC: " + fakeTime.GetUtcNow());
// 14.11.2023 20:30 Uhr:
Console.WriteLine("UTC: " + fakeTime.GetUtcNow());
// 14.11.2023 21:30 Uhr:
Console.WriteLine("UTC: " + fakeTime.GetUtcNow());

async Task Wait5Seconds(TimeProvider t)
{
CUI.Cyan("Warten beginnt");
PrintTime(TimeProvider.System);
await t.Delay(new TimeSpan(0, 0, 6));
// oder
//await Task.Delay(new TimeSpan(0, 0, 5), fakeTimeProvider);
PrintTime(TimeProvider.System);
CUI.Cyan("Warten beendet!");
}

CUI.H2("6 Sekunden warten auf TimeProvider.System");
await Wait5Seconds(TimeProvider.System);
CUI.H2("6 Sekunden warten auf FakeTimeProvider von Microsoft");
var ErhoeheZeitNachEinerSekundeUm10Sekunden = async () =>
{
await Task.Delay(new TimeSpan(0, 0, 1));
fakeTime.Advance(TimeSpan.FromSeconds(10));
};
#pragma warning disable CS4014
ErhoeheZeitNachEinerSekundeUm10Sekunden();
#pragma warning restore CS4014
//--> das endet nie, wenn man Advance() nicht aufruft!:
await Wait5Seconds(fakeTime);
}
}







BetterCode Online Konferansı () .NET 9.0 19 Kasım 2024'te Ix VE dpunkt.verlag Www.it-visions.net uzmanlarını pratik örnekler kullanarak .NET 9.0'ın bitmiş durumunu sunacaktır. Bu.

Bilet satışları çoktan başladı: Programın duyurulmasından önce indirimli kör kuşlar mevcuttur.








(RME)
 
Üst