2010-01-20 16 views
7

TDD'ye oldukça yeniyim ama alaycıların, bağımlılıkların nasıl kullanıldığını, bağımlılık enjeksiyonunun nasıl kullanılacağını, benzer problemleri çözmek için kontrolün tersine çevrilmesinin ne kadar sürdüğünü anlamak için kullanıyordum ... ama bir nedenden ötürü kullanma konusunda çok huzursuz hissediyorum. bağımlılık enjeksiyonu ve bir 'IThread' (veya benzeri) içinde geçirme.Ünite, dişleri hangi yöntemle test eder?

Bazı temel bağlamı vermek için - Eski bir uygulamaya birim testleri eklemeye çalışıyorum ve bir kurucunun, iki iş parçacığının oluşturduğu bir sınıfı nasıl test edeceğinden emin değilim.

Bağımlılık enjeksiyonunu kullanmanın tek seçeneği mi?

Eğer öyleyse, iş parçacığı hangi işlevsellik getiriyor? Konu olduğu gibi, iş parçacığı her ikisi de (gerçek) döngüler sırasında çalışır ve döngüden asla çıkmaz (uygulama sona ermediği sürece). Döngüler içinde, makul kod parçaları var ve bu testte gerçekten sahip olmak istediğim kod.

Daha da kötüsü yapmak için Tüm işlevselliği döngülerden ve genel yöntemlerine (yalnızca genel yöntemlerimi başka bir projede testlerim olarak test ediyorum) çekmek istemiyorum. Kodun başka bir yerinde sınıfın kullanımı kolay.

Herhangi bir öneriniz var mı?

cevap

5

İşlevselliği yöntemlerine ve bunun yerine InternalsVisibleTo işlevini kullanabilir misiniz? Onların özel olmasını gerçekten istiyor olsanız bile, bu makul bir uzlaşma çözümdür.

Eğer iş parçacığınız normalde sonsuza kadar koşarsa, bu onu test etmeyi çok zorlaştırır ... ve gerçekten "iş parçacığı" bölümünün ayrı ayrı test edilmesi gerektiği gibi geliyorsa, ayrı iş parçacığı üzerinde olmak.

Bazen yararlı olan bir seçenek, bir IScheduler arabirim tipine sahip olmaktır - uygun gördüğü her yerde bir eylem gerçekleştirmesini isteyin; Üretim bir yeni bir iş parçacığı oluşturacaktı, ancak testiniz, mevcut iş parçacığı içindeki eylemi (veya test kodunuzda kontrolünüzün olduğu bir iş parçacığı üzerinde) çalıştırabilir. Buradaki durumunuz için uygun olduğundan emin değilim, iş parçacığının sonsuza kadar koşacağı yerde olabilir, ancak diğer situatoinler hakkında düşünmek isteyebilirsiniz.

+0

Evet, test ettiğim sınıf bir sınıf kütüphanesinde olduğu ve sadece harici olarak kullanıldığı için makul bir uzlaşmadır. Bu gerçekten işe yarayacak, teşekkürler! – InvertedAcceleration

İlgili konular