Birim testinde gerçekten tecrübeli olmadığım için önce öğreneceğim bazı kuralları toplamaya çalışıyorum.
Hiç karşılaşmadığınız problemler için “kuralları” öğrenirken dikkatli olun. Bazı "kurallar" veya "en iyi uygulamalar" ile karşılaşırsanız, bu kuralın "kullanılması" gerektiği ve basitçe "oyuncak " kuralının ne dediğini göz ardı ederek bu sorunu kendiniz çözmeye çalışmak için basit bir oyuncak örneği bulmanızı öneririm .
Bu durumda, 2 veya 3 basit sınıf ve uygulamaları gereken bazı davranışlar bulmaya çalışabilirsiniz. Sınıfları doğal hissettiren şekilde uygulayın ve her davranış için bir birim testi yazın. Karşılaştığınız sorunların bir listesini yapın, örneğin bir şekilde çalışan şeylerle başlarsanız, o zaman geri dönüp daha sonra değiştirmek zorunda kaldı; işlerin nasıl bir araya gelmesi gerektiği konusunda kafanız karışmışsa; Eğer kazan yazı yazarken rahatsız olduysanız; vb.
Sonra aynı kuralı "kuralı" izleyerek de çözmeye çalışın. Yine, karşılaştığınız sorunların bir listesini yapın. Listeleri karşılaştırın ve kurala uyurken hangi durumların daha iyi olacağını ve hangilerinin olmayabileceğini düşünün.
Asıl sorunuza gelince, "temel mantık" ve "hizmetler" arasında bir ayrım yaptığımız bir bağlantı noktası ve adaptör yaklaşımı tercih etme eğilimindeyim (bu, saf işlevler ile etkili prosedürler arasında ayrım yapmaya benzer).
Çekirdek mantık, sorun alanını temel alarak uygulamanın “içinde” olduğu şeyleri hesaplamakla ilgilidir. Sanki sınıflar içerebilir User
, Document
, Order
, Invoice
, vb It yolunda çekirdek sınıfları aramasını new
, diğer temel sınıflar için o zamandan beri ediyoruz "iç" uygulama ayrıntılarını. Örneğin, bir tane oluşturmak Order
da neyin sipariş edildiğini Invoice
ve Document
ayrıntılarını yaratabilir . Testler sırasında bunları alay etmeye gerek yok çünkü bunlar test etmek istediğimiz gerçek şeyler!
Bağlantı noktaları ve adaptörler, çekirdek mantığın dış dünyayla nasıl etkileşimde bulunduğudur. Şeyler gibi burasıdır Database
, ConfigFile
, EmailSender
vb yaşıyor. Bunlar testi zorlaştıran şeylerdir, bu yüzden bunları çekirdek mantık dışında yaratmanız ve gerektiğinde (bağımlılık enjeksiyonuyla veya yöntem argümanları vb. İle) aktarmanız önerilir .
Bu şekilde, temel mantık (önemli iş mantığının yaşadığı ve en fazla çalkalamaya tabi olduğu uygulamaya özel olan bölüm) veritabanları, dosyalar, e-postalar, vb. İle ilgilenmek zorunda kalmadan kendi başına test edilebilir. Bazı örnek değerleri iletebilir ve doğru çıktı değerlerini aldığımızı kontrol edebiliriz.
Bağlantı noktaları ve bağdaştırıcılar, iş mantığını önemsemeden, veritabanı, dosya sistemi vb. İçin alay kullanarak ayrı ayrı test edilebilir. Bazı örnek değerleri geçebilir ve bunların depolandıklarından / okunduklarından / gönderildiğinden / vb. Olduklarından emin olabiliriz. uygun şekilde.