Başlangıçta TDD, test kodunda şimdi iyi tanımlanmış olan spesifikasyon göz önüne alındığında, kodladığınız şeyin doğru kalmasını sağlamak için testin önceden yazıldığı çevik hareketten geldi. Ayrıca, kodunuzu değiştirdiğinizde, kodun davranışını değiştirmediğinizi kanıtlamak için testlere güvenebileceğinizden, yeniden düzenlemenin çok önemli bir yönü olarak ortaya çıktı.
Daha sonra insanlar geldi ve kodunuz hakkında bilgi sahibi olduklarını düşündükleri ve daha sonra birim testlerinizi yazmanıza yardımcı olmak için test saplamaları oluşturabileceklerini düşündüler ve bence her şey yanlış gitti.
Test saplamaları, ne yaptığına dair hiçbir fikri olmayan bir bilgisayar tarafından üretilir, sadece her yöntem için dikkatsizce bir saplama üretir, çünkü bunu yapması söylenir. Bu, söz konusu yöntemin karmaşıklığından veya tek başına test için uygun olup olmadığından bağımsız olarak her yöntem için bir test durumunuz olduğu anlamına gelir.
Bu, TDD metodolojisinin yanlış ucundan teste geliyor. TDD'de kodun ne yapacağını bulmanız ve ardından bunu başaran bir kod üretmeniz gerekir. Bu, kodun kodun ne yapması gerektiğini yaptığını kanıtlayan testler yazmanız gerektiği için kendini gerçekleştirir. Yöntem tabanlı test saplamalarının otomatik oluşturulmasıyla birlikte, kodunuzun her küçük yönünü kanıtlayarak zamanınızı boşa harcarsınız, bu da tüm küçük parçalar bir araya getirildiğinde kolayca yanlış olduğunu kanıtlayabilir.
Fowler kitabında testi tarif ettiğinde, her sınıfı kendi ana yöntemiyle test etmeye atıfta bulundu. Bunu geliştirdi, ancak konsept hala aynı - tüm sınıfı test edersiniz, böylece bir bütün olarak çalışır, tüm bu yöntemlerin etkileşimini kanıtlamak için tüm testleriniz bir araya getirilir, böylece sınıf tanımlanan beklentilerle tekrar kullanılabilir.
Test araç kitleri bize bir kötülük yaptı, araç setinin gerçekten bir şeyler yapmanın tek yolu olduğunu düşünme yolunu açtı, kodunuzdan en iyi sonucu almak için kendiniz için daha fazla düşünmeniz gerekiyor. Küçük kodlar için test kodlarına körü körüne koymak, sadece bir entegrasyon testinde çalışmanızı tekrarlamanız gerektiği anlamına gelir (ve bunu yapacaksanız, şimdi yedekli ünite test aşamasını tamamen atlamıyorsunuz). Ayrıca, insanların% 100 test kapsamı almaya çalışırken çok fazla zaman harcadıkları ve kodun entegrasyon testini daha kolay hale getirmesi için daha iyi harcanan büyük miktarda alaycı kod ve veri oluşturduğu anlamına gelir (yani, çok fazla veri bağımlılıkları, birim testi en iyi seçenek olmayabilir)
Son olarak, yönteme dayalı birim testlerinin kırılganlığı sorunu ortaya koymaktadır. Yeniden düzenleme, birim testlerle birlikte kullanılmak üzere tasarlanmıştır, eğer testleriniz her zaman kırılırsa, yeniden düzenleme yaptığınız için bir şey tüm yaklaşımda ciddi bir şekilde ters gitti. Yeniden düzenleme yöntemleri oluşturmayı ve silmeyi sever, bu yüzden açıkçası yöntem başına kör test yaklaşımı başlangıçta amaçlanan değildir.
Birçok yöntemin onlar için testler alacağından şüphem yok, bir sınıfın tüm genel yöntemlerinin test edilmesi gerekir, ancak bunları tek bir test vakasının parçası olarak birlikte test etme konseptinden uzaklaşamazsınız. Örneğin, bir set ve get yöntemim varsa, verileri içine alan testler yazabilir ve dahili üyelerin uygun olup olmadığını kontrol edebilirim, ya da her birini bazı verileri koymak ve sonra tekrar alıp almadığımı görmek için kullanabilirim hala aynı ve bozuk değil. Bu sınıfı test ediyor, her yöntem izole değil. Ayarlayıcı yardımcı bir özel yönteme dayanıyorsa, sorun değil - tüm sınıfı test ediyorsanız ayarlayıcının çalıştığından emin olmak için özel yöntemi taklit etmeniz gerekmez.
Bence din bu konuya giriyor, dolayısıyla şimdi 'davranış güdümlü' ve 'test güdümlü' gelişme olarak bilinen şemaya bakıyorsunuz - birim testin orijinal konsepti davranış güdümlü gelişim içindi.