Daha temel bir soru sorulması gerektiğini düşünüyorum, neden özel yöntemi ilk başta test etmeye çalışıyorsunuz. Bu, özel yöntemi bu sınıfın genel arabirimi aracılığıyla test etmeye çalıştığınız bir kod kokusudur, oysa bu yöntem bir uygulama detayı olduğu için bir nedenden dolayı özeldir. Kişi, yalnızca kamusal arayüzün davranışı ile ilgilenmelidir.
Özel yöntemin davranışını ortak refactorings kullanarak test etmek isterseniz, kodunu başka bir sınıfa çıkarabilirim (belki paket düzeyinde görünürlükle, bu yüzden genel API'nin bir parçası olmadığından emin olun). Daha sonra davranışlarını ayrı ayrı test edebilirim.
Yeniden düzenleme ürünü, özel yöntemin artık orijinal sınıfa ortak çalışan ayrı bir sınıf olduğu anlamına gelir. Davranışı kendi birim testleri ile iyi anlaşılmış olacaktır.
Daha sonra orijinal sınıfı test etmeye çalıştığımda davranışını alay edebilirim, böylece daha sonra genel arayüzün birleşik patlamasını ve tüm özel yöntemlerinin davranışını test etmek yerine o sınıfın genel arayüzünün davranışını test etmeye konsantre olabilirim. .
Bunu araba sürmeye benzer görüyorum. Bir araba kullandığımda motor kaputu takılıyken araba kullanmıyorum, böylece motorun çalıştığını görebiliyorum. Aracın çalıştığı arayüze, yani motorun çalıştığını bilmek için devir sayacına ve hız göstergesine güveniyorum. Gaz pedalına bastığımda arabanın gerçekten hareket etmesine güveniyorum. Motoru test etmek istersem tek başına bununla ilgili kontroller yapabilirim. : D
Elbette eski bir uygulamanız varsa özel yöntemleri doğrudan test etmek son çare olabilir, ancak daha iyi testler sağlamak için eski kodun yeniden düzenlenmesi tercih edilir. Michael Feathers bu konuda harika bir kitap yazdı. http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052
pre-historic
internet yıllarında ... ama özel yöntemlerin birim testi artık hem kolay hem de basittir, Visual Studio gerektiğinde gerekli erişimci sınıflarını üretiyor ve test mantığının basit işlevsel testler için istenebileceğine yakın snippet'lerle doldurulması. Bkz. msdn.microsoft.com/tr-tr/library/ms184807%28VS.90%29.aspx