IDisposable
numaralı kütüphane kod parçası üzerinde çalışıyorum. Yönetilen yol (using
aracılığıyla) kolayca test edilebilir. Ancak finalizer hakkında merak ediyorum: System.GC.Collect()
arayarak finalizer çalıştırmak için yeterli mi?Birim testi nasıl tanımlanabilir?
cevap
Hayır, GC.Collect() çağrısı da bu çağırmak gerekir, eşzamansızsa:
System.GC.WaitForPendingFinalizers();
Teşekkürler bir yığın! Neden istediğimi biliyordum :-) –
Bence GC.Collect() kendisinin eşzamanlı olduğunu (yani Hafıza o zaman geri dönebilir) ama finalizatörler kendileri ayrı ayrı çalışırlar. Tamamen yanlış olsa da ... –
Şimdi hem yapıyorum hem de test her zaman geçtim e. Yani, sonleştiriciden doğru uzatma noktası denir. –
IDisposable
arabiriminden çıkmak ve Dispose
numaralı bir aramayı bekler misiniz? Bu, en azından nesnenin gerçekte ne zaman bertaraf edildiğini görmenizi sağlar.
Bir kesme noktası belirlemek, bunu keşfetmek için yeterlidir. Dispose() 'ın uygulamasının test edilip edilmediğini test ediyorum, –
Ben (Sonlandrmay haline getirme yolunda yalın düşünüyorum) başka bir yöntemi çağırmak ve test diğeri bunu yöntem ne istersen yapar. % 100 kod kapsamı elde edemezsiniz, ancak en azından, yöntemin nesnenin kaynaklarını uygun bir şekilde yayınladığını biliyorsunuzdur.
Dispose, Finalization, and Resource Management 'a baktığım konuyla ilgili en iyi referansı inceleyeceğim. Onların desen kullanma:
~ComplexCleanupBase()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected override void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// dispose-only, i.e. non-finalizable logic
}
// new shared cleanup logic
disposed = true;
}
base.Dispose(disposing);
}
Ölü basit Finalizer/Dispose() yöntemleri ve test edilebilir bir Dispose (bool) ile rüzgar. Kesinleştirme veya GC sınıfını kullanarak herhangi bir şeyi zorlamaya gerek yoktur.
Evet, bunu tam olarak yapıyorum. MSDN'de önerilenlerin yalnızca küçük bir uyarlaması. –
- 1. Temel Birim Testi ve Birim Testi
- 2. Birim testi
- 3. NSCoding nasıl birim testi yapılır?
- 4. iPhone'da birim testi nasıl çalışır?
- 5. Otomatik C birim testi
- 6. Javascript Sandbox birim testi
- 7. Silverlight 4 Birim Testi
- 8. Birim testi özel sınıflar
- 9. Birim Testi CacheManager
- 10. symfony2 birim testi doğrulama
- 11. C++ Birim Testi
- 12. Birim Testi ASP.net Page_Load
- 13. TaskScheduler.FromCurrentSynchronizationContext - birim testi
- 14. Birim testi Activity.startService() çağrısı?
- 15. Denetleyici birim testi, thin3
- 16. Birim testi NHibernate UserTypes
- 17. Oracle ile birim testi
- 18. CXF birim testi
- 19. Vbscript otomatik/birim testi
- 20. ASP.NET Birim Testi
- 21. Birim testi RavenDb sorguları
- 22. Birim Testi Doctrine ODM
- 23. yasemin parametrelenmiş birim testi
- 24. Birim Testi ve Log4net
- 25. Birim testi Python'da Teoriler?
- 26. Visual Studio Birim Testi - Belirtilen üye bulunamadı
- 27. birim testi - paperclip ile model
- 28. Birim testi İlkbahar AOP yöntemleri
- 29. JMS (ActiveMQ) ile birim testi
- 30. QT: simüle edilmiş birim testi
Tanımlanabilir model için IDisposable'a sadık kalırsanız, bunu test eden birimin işe yarayacağından eminim. –
üzgünüm, "Bu ünitenin test edilmesinin o kadar faydalı olacağından emin değilim ... –
@Mitch: Yönetilen ve yönetilmeyen kaynakların doğru zamanda atılması için önemsiz değil, doğru şekilde uygulanması Söz konusu kütüphane kodu, tam olarak, _not_ testindeki bir noktayı görememekten sorumlu olduğu için ... –