Anladığım kadarıyla, çoğu insan özel yöntemlerin doğrudan test edilmemesi gerektiği, bunun yerine kamusal yöntemler ne şekilde olursa olsun denenmesi gerektiği konusunda hemfikir. Onların noktasını görebiliyorum, ancak "TDD'nin Üç Yasasını" izlemeye çalıştığımda ve "Kırmızı - yeşil - refaktör" döngüsünü kullanmaya başladığımda bazı problemlerim var. Bence en iyi örnekle açıklanıyor:
Şu anda, bir dosyayı okuyabilen (sekmeyle ayrılmış veriler içeren) ve sayısal olmayan veriler içeren tüm sütunları filtreleyebilen bir programa ihtiyacım var. Sanırım bunu yapmak için halihazırda bazı basit araçlar var, ancak onu baştan çizmeye karar verdim, çünkü çoğunlukla TDD ile pratik yapmanın güzel ve temiz bir proje olacağını düşündüm.
Yani, ilk önce "kırmızı şapkayı taktım", yani, başarısız bir teste ihtiyacım var. Sayısal olmayan tüm alanları bir çizgide bulan bir yönteme ihtiyacım olacağını düşündüm. Bu yüzden basit bir test yazıyorum, tabii ki derhal derlenemiyor, bu yüzden fonksiyonun kendisini yazmaya başlıyorum ve bir kaç ileri ve geri (kırmızı / yeşil) döngüden sonra bir çalışma fonksiyonuna ve tam bir teste sahibim.
Sonra, her seferinde bir satır dosya okuyan ve bir satırda okuyan "gatherNonNumericColumns" işleviyle devam ediyorum ve sonunda çıkarılması gereken tüm sütunları toplamak için her satırdaki "findNonNumericFields" işlevimi çağırıyorum. Birkaç kırmızı-yeşil çevrimli ve yine bir çalışma fonksiyonu ve tam bir test olan bittim.
Şimdi yeniden düşünmeliyim. "FindNonNumericFields" yöntemim yalnızca "gatherNonNumericColumns" uygularken buna ihtiyacım olacağını düşündüğüm için tasarlandığından, "findNonNumericFields" öğesinin özel olmasına izin vermenin makul olacağını düşünüyorum. Ancak bu, ilk testlerimi bozacak, çünkü test ettikleri yönteme artık ulaşamayacaklardı.
Bu yüzden, özel bir yöntem ve onu test eden bir test paketi ile bitirdim. Birçok insan özel yöntemlerin test edilmemesi gerektiğini tavsiye ettiğinden, burada kendimi bir köşeye boyattım gibi geliyor. Ama tam olarak nerede başarısız oldum?
Daha yüksek bir düzeyde başlayabilirdim, nihayetinde kamu yöntemim haline geleceğini test eden bir test yazdım (yani, FindAndFilterOutAllNonNumericalColumns), ancak bu TDD'nin tüm noktasına biraz karşı geliyor (en azından Bob Amca'ya göre). : Yazma testleri ve üretim kodu arasında sürekli geçiş yapmalısınız ve herhangi bir zamanda, tüm testleriniz son dakika içinde çalıştı. Çünkü bir kamu yöntemi için test yazarak başlarsam, testin kamuoyunu test etmesi için özel yöntemlerde tüm detayları öğrenmeden önce birkaç dakika (veya çok karmaşık durumlarda saatlerce veya hatta günler) olacak yöntem geçer.
Peki ne yapmalı? TDD (hızlı kırmızı-yeşil-refactor çevrimi ile) sadece özel yöntemlerle uyumlu değil mi? Yoksa tasarımımda bir hata mı var?
private
bunu yapmak için mantıklı olmadığı.