Kesinlikle iyi bir liste. İşte bununla ilgili birkaç düşünce:
Önce testi, ardından kodu yazın.
Yüksek düzeyde katılıyorum. Ancak, daha spesifik olacağım: "Önce bir test yazın, ardından testi geçmek için yeterli kodu yazın ve tekrarlayın." Aksi takdirde, birim testlerimin daha çok entegrasyon veya kabul testleri gibi görüneceğinden korkarım.
Bağımlılık ekleme kullanarak sınıfları tasarlayın.
Kabul. Bir nesne kendi bağımlılıklarını yarattığında, onlar üzerinde hiçbir kontrolünüz yoktur. Kontrol / Bağımlılık Enjeksiyonunun Ters Çevrilmesi, test edilen nesneyi taklitler / saplamalar / vb. İle izole etmenize olanak tanıyan bu kontrolü size verir. Bu, nesneleri ayrı ayrı test etme şeklidir.
Model-View-Controller veya Model-View-Presenter kullanarak UI kodunu davranışından ayırın.
Kabul. Sunum yapanın / denetleyicinin bile çizgili / alaylı bir görünüm ve model vererek DI / IoC kullanılarak test edilebileceğini unutmayın. Check Sunucu İlk bu konuda daha fazla bilgi için TDD.
Statik yöntemler veya sınıflar yazmayın.
Buna katılıyorum emin değilim. Statik bir yöntemi / sınıfı, taklitler kullanmadan birim test etmek mümkündür. Belki de bu bahsettiğiniz Rhino Mock'a özgü kurallardan biridir.
Arayüzleri programlayın, sınıfları değil.
Katılıyorum, ancak biraz farklı bir nedenden dolayı. Arayüzler, yazılım geliştiricisine, sadece çeşitli sahte nesne çerçevelerini desteklemenin ötesinde, büyük bir esneklik sağlar. Örneğin, DI'yi arayüzler olmadan düzgün şekilde desteklemek mümkün değildir.
Dış bağımlılıkları izole edin.
Kabul. Dış bağımlılıkları bir arayüzle kendi cephenizin veya adaptörünüzün (uygun şekilde) arkasına gizleyin. Bu, yazılımınızı bir web hizmeti, bir kuyruk, bir veritabanı veya başka bir şey gibi harici bağımlılıktan ayırmanıza olanak tanır. Bu özellikle ekibiniz bağımlılığı (yani harici) kontrol etmediğinde önemlidir.
Alay etmeyi düşündüğünüz yöntemleri sanal olarak işaretleyin.
Bu Rhino Mocks'ın bir sınırlamasıdır. El ile kodlanmış saplamaları sahte bir nesne çerçevesine tercih eden bir ortamda, bu gerekli değildir.
Ve dikkate alınması gereken birkaç yeni nokta:
Yaratıcı tasarım kalıplarını kullanın.Bu, DI'ye yardımcı olacaktır, ancak aynı zamanda bu kodu izole etmenize ve diğer mantıktan bağımsız olarak test etmenize de izin verir.
Bill Wake's Arrange / Act / Assert tekniğini kullanarak testler yazın . Bu teknik, hangi konfigürasyonun gerekli olduğunu, gerçekte neyin test edildiğini ve neyin beklendiğini çok netleştirir.
Kendi taklitlerinizi / taslaklarınızı yuvarlamaktan korkmayın. Çoğu zaman, sahte nesne çerçevelerini kullanmanın testlerinizi okumayı inanılmaz derecede zorlaştırdığını göreceksiniz. Kendinizinkini yuvarlayarak, taklitleriniz / taslaklarınız üzerinde tam kontrole sahip olacaksınız ve testlerinizi okunaklı tutabileceksiniz. (Önceki noktaya geri dönün.)
Birim testlerinizin çoğaltılmasını soyut temel sınıflara veya kurulum / sökme yöntemlerine yeniden düzenleme eğiliminden kaçının.Bunu yapmak, yapılandırma / temizleme kodunu geliştiriciden birim testini karıştırmaya çalışırken gizler. Bu durumda, her bir testin netliği, tekrarlamayı yeniden düzenlemekten daha önemlidir.
Sürekli Entegrasyonu uygulayın. Kodunuzu her "yeşil çubukta" kontrol edin. Yazılımınızı oluşturun ve her girişte tüm birim testlerinizi çalıştırın. (Elbette, bu kendi başına bir kodlama uygulaması değildir; ancak yazılımınızı temiz ve tamamen entegre tutmak için harika bir araçtır.)