Otomatik test ile ilgili bir şey, test edilebilir olması için kod yazmanızı gerektiriyor olmasıdır. Bu, kendi başına kötü bir şey değildir (aslında, kurallardan kaçınılması gereken birçok uygulamayı engellediğinden dolayı iyidir), ancak mevcut test koduna ünite testini uygulamaya çalışıyorsanız, ihtimaller değil. test edilebilir bir şekilde yazılmıştır.
Singleton, statik yöntemler, sicil, servis yer belirleyicileri vb. Gibi şeyler, çözülmesi zor olan bağımlılıkları ortaya çıkarır. Demeter Yasası'nın ihlali, kod tabanınızın çok fazla bir kısmının kod tabanınızın diğer kısımlarının nasıl çalıştığı hakkında çok fazla şey bildiği ve kırılması zor olabilecek başka gizli bağımlılıklar getirdiği anlamına gelir. Tüm bunlar, bir modülü kod tabanının geri kalanından izole etmeyi zorlaştırıyor ve modüllerinizi yalıtılmış bir şekilde test edemiyorsanız, birim testleri değerlerinin çok büyük bir kısmını kaybediyor. Eğer bir test başarısız olursa, test edilen ünitedeki bir hatadan veya bağımlılıklarından birinde bir hatadan dolayı veya belki de bağımlı bir veri kaynağından alınan verilerin test yazarının beklediği gibi olmaması nedeniyle ? Yapabilirsen'
Kodlayıcılar, testler göz önünde bulundurularak yapılamadığını gördüm, kodlayıcılar, kodların kuplajı serbest bırakmak için gereken işi yapmaktan ziyade kodun beklendiği gibi çalışmasına odaklanmaya odaklanmaya meyilli olduğu için doğal olarak dengesiz olma eğilimindedir. . Ünite testi ile yazılmış kod, çok farklı görünme eğilimindedir.
Birçok insan ilk defa yapmaya başladığında ünite testine saf bir yaklaşımla yaklaşıyor, varolan bir kod temeli için sadece bir test yükü yazabileceklerini düşünüyor ve hepsi iyi olacak, yukarıda belirtilen konular. Ünite testlerinde bir miktar kurulum yapmaları gerektiğini keşfetmeye başlıyorlar ve hepsinin çalışmasını sağlamak için sık sık sorgulanabilirler çünkü koddaki izolasyon eksikliği bir test başarısızlığına neyin neden olduğunu izleyemeyeceğiniz anlamına geliyor. Ayrıca, sistemin nasıl çalışması gerektiğine dair oldukça soyut bir bakış açısı gösteren "zeki" testler yazmaya çalışmaya da başlıyorlar. Bu başarısız olma eğilimindedir, çünkü "akıllı" bir birim testi, potansiyel bir hata kaynağıdır. Test edilen modüldeki bir hata nedeniyle test başarısız oldu mu? veya testteki bir hata nedeniyle? Bir test o kadar basit olmalı ki, bir hatanın içinde saklanma olasılığı yoktur. Aslında, en iyi testler nadiren 2 satırdan fazladır, ilk satır test ünitesine bir şey yapması talimatını verirken, ikincisi yaptığı şeyin beklenenin ne olduğunu iddia eder.
Eğer ekibiniz ünite testini benimseme konusunda ciddiyse, mevcut bir projeyle başlamak akıllıca olmaz. Ekibinizin mevcut projeleri büyük çapta yeniden düzenleme yapılmadan denenemez. Çalışmak için temiz bir yazı tahtası olduğu için, birim testi hakkında bilgi edinmenin temeli olarak yeni bir proje kullanmaktan daha iyisin. Yeni kod tabanını singletonlar, kayıt defterleri ve diğer gizli bağımlılıklar üzerine bağımlılık enjeksiyonunu desteklemek için tasarlayabilirsiniz, uygulama yerine vb. Arayüzlere bağlı olarak yazabilirsiniz. Ayrıca, testleri sonradan test edilen kodun yanına da yazabilirsiniz (ve sonra yazmalısınız), çünkü testlerin yazılması, test edilen modülün yapmayı düşündüğünden ziyade yapabileceğini düşündüğünüz şeyi yaptığından emin olan ünite testlerinde sonuçlanır. özellikleri ne yapması gerektiğini söylüyor.
Birim testinde bir miktar güven kazanırsanız, ekibiniz muhtemelen mevcut kodlarındaki kusurları birim testlerine engel olacak şekilde anlamaya başlar. Bu, daha fazla test edilebilir hale getirmek için mevcut kodu yeniden düzenlemek için çalışmaya başlayabileceğiniz zamandır. İddialı olmayın ve hepsini bir kerede yapmaya çalışmayın ya da tamamen yeni bir sistemle çalışan bir sistemi değiştirmeye çalışın, sadece kolayca test edilebilecek kod tabanının parçalarını bularak başlayın. Herhangi bir bağımlılık veya bağımlılıkların açık olduğu yerler) ve bunlar için testler yazınız. Kodun yanında bir test yazmanın sonradan test yazmaya tercih edildiğini biliyorum, ancak daha sonra yazılan bir test bile bir başlangıç noktası olarak değer taşıyor. Testleri, dersin nasıl çalıştığını, spesifikasyonlarının yapması gerekenden başka bir şey bilmiyormuşsunuz gibi yazın. Testleri çalıştırdığınızda ve hatalar aldığınızda, teknik özellikler veya uygulama yanlıştır. Hangisinin yanlış olduğunu belirlemek için her ikisini de kontrol edin ve buna göre testi veya kodu güncelleyin.
Asılı meyveyi çıkardıktan sonra, asıl işiniz başlıyor. Kod tabanınızdaki gizli bağımlılıkları bulmaya ve bunları birer birer düzeltmeye başlamanız gerekir. Bu noktada aşırı iddialı olmayın, sadece bir seferde bir modül yapmak, hatta bir modülde sadece bir tek konuya devam etmek, testin önündeki engeller giderilinceye ve bir sonraki aşamaya geçebilirsiniz.
TL: DR: Çoğu insan test etmenin kolay olduğunu düşünüyor ve testleri mevcut koda kolayca ekleyebiliyorsunuz. Bu varsayımların her ikisi de yanlıştır. Her iki gerçeği de göz önünde bulundurarak projelerinize birim testi yaptırmak için bir projeye başlarsanız, başarılı olmanız daha olasıdır.