.NET 8.0'daki yenilikler [17]: Zamansal olarak spesifik testler için geçici soyutlama

Adanali

Member
Temel sınıf kitaplığında Microsoft, soyut sınıfla birlikte .NET 8.0'a sahiptir. TimeProvider Testin bir parçası olarak zaman dilimleri de dahil olmak üzere zamanları simüle etmenin kolay bir yolu eklendi.

Duyuru








Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla çok sayıda orta ve büyük ölçekli şirketi danışmanlık, eğitim ve yazılım geliştirme yoluyla destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.







Şu anki zaman için bir soyutlama kullanmak yerine System.DateTime.Now, System.DateTime.UtcNow VE System.DateTimeOffset.Now Zamana veya tarihe bağlı program kodu için gerçek birim testlerinin bir soyutlamaya ihtiyaç duyması nedeniyle birçok geliştirici bunları zaten yazmıştır. Aksi halde teste başlamak için belirli bir saat veya tarihe kadar beklemeniz gerekir.

Microsoft artık .NET 8.0'da yerleşik bir soyutlama sağlıyor. İçimdeki zamanlar bile Task.Delay() VE Task.Async() üzerine düşebilir.

Aşağıdaki liste farklı yönleri göstermektedir:

  • TimeProvider.System bir tane sağlar TimeProvider sistem saatine göre gerçek zamanlı olarak.
  • FakeTimeProvider Microsoft.Extensions.TimeProvider.Testing NuGet paketinde sağlanan bir Microsoft sınıfıdır. Bu sınıf, manuel olarak ayarlanabilen sabit bir zaman spesifikasyonuna izin verir Advance() birini belirtmek TimeSpan-Konu veya her okunduğunda örneğin 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);
}
}







19 Kasım 2024'te BetterCode() .NET 9.0 çevrimiçi konferansında, iX VE dpunkt.verlag www.IT-Visions.de adresindeki .NET uzmanları, pratik örnekler kullanarak .NET 9.0'ın son sürümünü sunacaklar. Bunlar arasında .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Entity Framework Core 9.0 ile OR eşlemesi, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0 ile platformlar arası geliştirme ve bir perspektif yer alıyor. .NET 10.0'da.

Bilet satışları başladı bile; indirimli kör kuş biletleri program duyurusu öncesinde satışa sunuldu.








(kendim)



Haberin Sonu
 
Üst