Test yazmak için iki neden var:
- Beklenen davranışı öne sürmek
- Davranışın gerilemesini önleme
Kabul (1) Beklenen davranışı ileri sürmek:
Beklenen davranışı öne sürerken, kodun olması gerektiğini düşündüğünüz gibi çalıştığından emin olmak istersiniz. Bu, herhangi bir geliştiricinin herhangi bir kod türünü uygularken gerçekleştireceği rutin manuel doğrulamanızı gerçekleştirmenin etkili bir şekilde otomatik bir yoludur:
- Az önce yazdığım işe yaradı mı?
- Bu döngü gerçekten bitiyor mu?
- Düşündüğüm sırada mı dönüyor?
- Bu boş bir girdi için işe yarar mı?
Bunlar hepimizin kafamızda cevapladığı sorular ve normalde kodu kafamızda da çalıştırmaya çalışırız, işe yarıyor gibi göründüğünden emin oluruz. Bu durumlarda, bilgisayarın bunları kesin bir şekilde yanıtlamasını sağlamak genellikle yararlıdır. Bu yüzden, bunu yaptığını iddia eden bir birim testi yazıyoruz. Bu bize kodumuza güven verir, hataları erken bulmamıza yardımcı olur ve hatta kodu gerçekten uygulamaya yardımcı olabilir.
Gerekli olduğunu düşündüğünüz her yerde bunu yapmak iyi bir fikirdir. Anlaması biraz zor olan veya önemsiz olmayan herhangi bir kod. Önemsiz kod bile bundan yararlanabilir. Her şey kendi özgüveninizle ilgili. Bunu ne sıklıkla yapacağınız ve ne kadar ileri gideceğiniz kendi memnuniyetinize bağlı olacaktır. Kendinizden emin bir şekilde Evet cevabını verebileceğiniz zaman durun: Bunun çalıştığından emin misiniz?
Bu tür testler için, görünürlük, arayüzler veya bunlardan herhangi biri ile ilgilenmezsiniz, yalnızca çalışan kodlara sahip olmayı önemsersiniz. Yani evet, soruya Evet yanıtı vermeniz için test edilmeleri gerektiğini düşünüyorsanız, özel ve korumalı yöntemleri test edersiniz.
(2) Davranışın gerilemesini önleme:
Çalışma kodunu aldıktan sonra, bu kodu gelecekteki hasarlardan korumak için bir mekanizmaya sahip olmanız gerekir. Kaynağınıza ve yapılandırmanıza bir daha kimse dokunmasaydı, buna ihtiyacınız olmazdı, ancak çoğu durumda siz veya başkaları yazılımınızın kaynağına ve yapılandırmalarına dokunacaksınız. Bu dahili kurcalamanın, çalışma kodunuzu kırma olasılığı yüksektir.
Mekanizmalar çoğu dilde, bu hasara karşı korunmanın bir yolu olarak zaten mevcuttur. Görünürlük özellikleri bir mekanizmadır. Özel bir yöntem izole edilmiş ve gizlenmiştir. Kapsülleme, şeyleri bölümlere ayırdığınız başka bir mekanizmadır, böylece diğer bölmeleri değiştirmek diğerlerini etkilemez.
Bunun genel mekanizmasına sınıra kodlama denir. Kodun bölümleri arasında sınırlar oluşturarak, bir sınırın içindeki her şeyi onun dışındaki şeylerden korursunuz. Sınırlar, etkileşim noktası ve nesnelerin etkileşim kurduğu sözleşme haline gelir.
Bu, bir sınırda yapılan değişikliklerin, arayüzünü kırarak veya beklenen davranışını bozarak, ona dayanan diğer sınırlara zarar vereceği ve muhtemelen kıracağı anlamına gelir. Bu nedenle, bu sınırları hedefleyen ve anlamsal ve davranışta değişmediklerini iddia eden bir birim testine sahip olmak iyi bir fikirdir.
Bu sizin tipik birim testinizdir, TDD veya BDD'den bahsederken en çok herkesin bahsettiği bir testtir. Önemli olan, sınırları sertleştirmek ve onları değişimden korumaktır. Bunun için özel yöntemleri test etmek istemezsiniz çünkü özel bir yöntem sınır değildir. Korumalı yöntemler kısıtlı bir sınırdır ve onları korurdum. Dünyaya maruz kalmazlar, ancak yine de diğer bölmelere veya "Birimlere" maruz kalırlar.
Bu ne yapmak için?
Gördüğümüz gibi, arayüzlerimizin değişmediğini iddia etmek için herkese açık ve korumalı yöntemleri birim test etmek için iyi bir neden var. Ayrıca, uygulama çalışmalarımızı ileri sürmek için özel yöntemleri test etmek için iyi bir neden var. Öyleyse hepsini test etmeli miyiz?
Evet ve hayır.
İlk olarak : Görünürlüğü ne olursa olsun kodunuzun çalıştığından emin olmak için çoğu durumda çalıştığına dair kesin bir kanıta ihtiyacınız olduğunu düşündüğünüz tüm yöntemleri test edin. Ardından bu testleri devre dışı bırakın. Orada iş yaptılar.
Son olarak : Sınırlarınız için testler yazın. Sisteminizin diğer birimleri tarafından kullanılacak her nokta için bir birim testi yaptırın. Bu testin anlamsal sözleşmeyi, yöntem adını, argüman sayısını vb. Belirttiğinden emin olun. Ayrıca testin ünitenin mevcut davranışını gösterdiğinden emin olun. Testiniz ünitenin nasıl kullanılacağını ve ünitenin neler yapabileceğini göstermelidir. Her kod aktarımında çalışması için bu testleri etkin tutun.
NOT: İlk test kümesini devre dışı bırakmanızın nedeni, yeniden düzenleme çalışmasının gerçekleşmesine izin vermektir. Aktif bir test, bir kod kuplajıdır. Test ettiği kodun ileride değiştirilmesini önler. Bunu sadece arayüzleriniz ve etkileşim sözleşmeleriniz için istiyorsunuz.