Özel bir SynchronizationContext
uygulamasının etrafında birim testleri yazmaya çalışıyorum.Bu uygulamaların, gerektiğinde nerede senkron veya asenkron olduğunu nasıl test edebilirim?
Bu sınıfa iki önemli operasyonlar Send
bir temsilci eşzamanlı çağırır ve Post
uyumsuz bir temsilci çağırır Send
ve Post
vardır.
Bu davranışı doğrulamak için delegelerin eşzamanlı veya eşzamansız olarak yürütüldüğünü doğrulamak için birim sınamaları yazmak istiyorum. Testlerin başarı durumları için gecikmelere dayanmasını istemiyorum, çünkü yapay olarak testlerin çalışmasını uzatıyor (ancak başarısızlıkların olması gecikmeye neden oluyor).
Başlangıçta bir temsilci yürütülmesini sinyal Görevler olarak bulunması
var tcs = new TaskCompletionSource<object>();
var context = new CustomSynchronizationContext();
context.Send((state) => tcs.SetResult(null), null);
// Task should already be completed!
Assert.IsTrue(this.tcs.Task.IsCompleted);
Ancak bu çok hızlı bir test atlet devam edemeden uyumsuz idam değildi temsilci garantilemez.
nasıl Send
delege tamamlanması için bloklar ve Post
olmadığından emin olmak için bağlam etrafında bir test sağlayabilir, ancak olan delegeler hem çağrılan mı?
+1 ... :) –
Isn Temsilci üzerinde yürütülen Thread.ManagedThreadId 'bir geri gönderme yapmak mümkün mü? Ana iş parçacığıyla aynı olsaydı, eşzamanlı olarak yürütüldü, aksi halde eşzamansız. – Davio
Senkronizasyon bağlamı, arama iş parçacığı üzerinde herhangi bir temsilci çalıştırmaz, dolayısıyla korkmuyorum. Konular sadece bir uygulama detayıdır. –