Uygulama üzerinde yapılan testler yerine arabirime test yapmayı tercih edin.
Anladığım kadarıyla özel yöntemler denenemez
Bu, geliştirme ortamınıza bağlıdır, aşağıya bakınız.
[özel yöntemler] endişelenmemelidir çünkü ortak API bir nesnenin bütünlüğünü doğrulamak için yeterli bilgi sağlayacaktır.
Bu doğru, TDD arayüzü test etmeye odaklanıyor.
Özel yöntemler, herhangi bir yeniden faktör döngüsü sırasında değişebilecek bir uygulama detayıdır. Arabirim veya kara kutu davranışını değiştirmeden yeniden faktörlendirmek mümkün olmalıdır . Aslında, bu TDD'nin yararının bir parçasıdır, bir sınıfa dahil olan değişimlerin bu sınıfa ait kullanıcıları etkilemeyeceğinden emin olmanın kolaylığı.
Sadece özel yöntemleri olan ve olaylarını dinleyerek diğer nesnelerle etkileşime giren bir nesne yapmam mümkün. Bu çok kapsüllenmiş, ancak tamamen denenemez olurdu.
Sınıf hiçbir yönteme sahiptir bile, olay işleyicileri bu kadar Olarak kamu arayüzü ve onun karşı olduğu kamu arabiriminde test edebilirsiniz.
Olaylar arabirim olduğundan, o nesneyi test etmek için oluşturmanız gereken olaylar.
Kullanarak içine bak sahte nesneleri olarak tutkal test sistemi için. Bir olay oluşturan ve durumun sonuçta meydana gelen değişimini (başka bir alıcı sahte nesne tarafından mümkün olabilir) yakalayan basit bir sahte nesne oluşturmak mümkün olmalıdır.
Ayrıca, test uğruna yöntemler eklemek için kötü bir uygulama olarak kabul edilir.
Kesinlikle, içsel durumu açığa vurmakta çok dikkatli olmalısınız .
Bu TDD'nin kapsülleme ihtimaline sahip olduğu anlamına mı geliyor? Uygun bakiye nedir?
Kesinlikle hayır.
TDD, sınıflarınızın uygulanmasını belki de basitleştirmek dışında değiştirmemelidir ( YAGNI'yi daha erken bir noktadan uygulayarak ).
TDD ile yapılan en iyi uygulama TDD'siz en iyi uygulama ile aynıdır, sadece nedenini daha erken öğrenirsiniz, çünkü arayüzü geliştirdiğiniz gibi kullanıyorsunuzdur.
Yöntemlerimin çoğunu veya tümünü şimdi herkese açık hale getirme eğilimindeyim ...
Bu bebeği banyo suyuyla atmak yerine daha iyi olur
Tüm metotları herkese açık hale getirmenize gerek kalmamalı, böylece TDD yöntemiyle geliştirilebilsin. Özel yöntemlerin gerçekten denenebilir olup olmadığını görmek için aşağıdaki notlarıma bakın.
Özel yöntemlerin test edilmesine daha ayrıntılı bir bakış
Eğer varsa mutlaka gerekir ünite sınıfının bazı özel davranışlarını test, dil / ortama bağlı, üç seçeneğiniz olabilir:
- Testleri test etmek istediğiniz sınıfa yerleştirin.
- Testleri başka bir sınıf / kaynak dosyaya yerleştirin ve test etmek istediğiniz özel yöntemleri genel yöntemler olarak gösterin.
- Test ve üretim kodunu ayrı tutmanıza izin veren, ancak yine de üretim kodunun özel yöntemlerine test kodu erişimi sağlayan bir test ortamı kullanın.
Açıkçası, 3. seçenek bugüne kadar en iyisidir.
1) Testleri test etmek istediğiniz sınıfa yerleştirin (ideal değil)
Test durumlarını test altındaki üretim koduyla aynı sınıf / kaynak dosyada saklamak en basit seçenektir. Ancak, pek çok ön işlemci yönergesi veya ek notu olmadan, üretim kodunuzu gereksiz yere şişiren test kodunuzla sona erecek ve kodunuzu nasıl yapılandırdığınıza bağlı olarak, yanlışlıkla bu uygulamanın kodunu kullanıcılara ifşa edebilirsiniz.
2) Test etmek istediğiniz özel yöntemleri herkese açık yöntemler olarak gösterin (gerçekten iyi bir fikir değil)
Önerildiği gibi, bu çok zayıf bir uygulamadır, kapsüllemeyi imha eder ve dahili uygulamayı kodun kullanıcılarına ifşa eder .
3) Daha iyi bir test ortamı kullanın (varsa en iyi seçenek)
Eclipse dünyasında, 3. parçaları kullanarak elde edilebilir . C # dünyasında kısmi sınıfları kullanabiliriz . Diğer diller / ortamlar genellikle benzer işlevselliğe sahiptir, sadece bulmanız gerekir.
Körce 1. veya 2. varsayımın, tek seçeneklerin, kirli çamaşırlarını halka açıkta yıkayan test koduyla veya kötü sınıf arayüzleriyle şişirilmiş üretim yazılımına yol açması muhtemel olacağını varsaymaktır. * 8' )
- Sonuç olarak - olsa özel uygulamaya karşı test yapmamak daha iyidir.