Birim testine karşı entegrasyon testinin belirleyici avantajı nedir?
Bu yanlış bir ikilik.
Birim testi ve entegrasyon testi iki benzer fakat farklı amaca hizmet eder. Birim testinin amacı, yöntemlerin çalıştığından emin olmaktır. Pratik açıdan, birim testleri, kodun birim testleri tarafından belirtilen sözleşmeyi yerine getirdiğinden emin olun . Bu, birim sınamalarının tasarlanma biçiminde açıktır: kodun ne yapması gerektiğini özellikle belirtir ve kodun bunu yaptığını iddia eder.
Entegrasyon testleri farklı. Entegrasyon testleri, yazılım bileşenleri arasındaki etkileşimi kullanır. Tüm testlerini geçen ve hala etkileşime girmedikleri için entegrasyon testlerinde başarısız olan yazılım bileşenlerine sahip olabilirsiniz.
Bununla birlikte, ünite testlerinde belirgin bir avantaj varsa, şudur: ünite testlerinin kurulması çok daha kolaydır ve entegrasyon testlerinden çok daha az zaman ve çaba gerektirir. Doğru kullanıldığında, birim testleri "test edilebilir" kodun geliştirilmesini teşvik eder, bu da nihai sonucun daha güvenilir, anlaşılması ve bakımı daha kolay olacağı anlamına gelir. Test edilebilir kod, uyumlu bir API gibi, tekrarlanabilir davranış gibi belirli özelliklere sahiptir ve kolay anlaşılan sonuçları döndürür.
Entegrasyon testleri daha zor ve daha pahalıdır, çünkü sık sık alaycı, karmaşık kurulum ve zor iddialara ihtiyaç duyarsınız. Sistem entegrasyonunun en üst seviyesinde, bir kullanıcı arabiriminde insan etkileşimini simüle etmeye çalıştığınızı hayal edin. Tüm yazılım sistemleri bu tür bir otomasyona ayrılmıştır. Ve peşinde olduğumuz otomasyon; insan testleri tekrarlanabilir değildir ve otomatik testlerde olduğu gibi ölçeklendirilmez.
Son olarak, entegrasyon testi kod kapsamı konusunda hiçbir garanti vermez. Entegrasyon testlerinizle kaç kod döngüsünün, koşulun ve dalın kombinasyonunu test ediyorsunuz? Gerçekten biliyor musun? Size ne kadar kod kapsamına sahip olduğunuzu ve kodunuzun döngüsel karmaşıklığının ne olduğunu söyleyen, birim testleri ve test altındaki yöntemlerle kullanabileceğiniz araçlar vardır. Fakat sadece ünite testlerinin yaşadığı yöntem düzeyinde gerçekten iyi çalışıyorlar.
Testleriniz her yeniden ateşlenici değişiyorsa, bu farklı bir sorun. Birim testlerinin, yazılımınızın ne yaptığını belgelemek, bunun olduğunu kanıtlamak ve daha sonra altta yatan uygulamayı yeniden düzenlemek istediğinizde tekrar yaptığını kanıtlamak için yapılması gerekiyor . API'niz değişirse veya sistem tasarımındaki değişime göre değişiklik yapmak için yöntemlere ihtiyacınız varsa, olması gereken budur. Çok fazla olursa , önce kodunuzu yazmadan önce testlerinizi yazmayı düşünün. Bu sizi genel mimari hakkında düşünmeye zorlar ve önceden kurulmuş olan API ile kod yazmanıza izin verir.
Çok fazla zaman harcıyorsanız, önemsiz kodlar için birim testleri yazıyorsanız
public string SomeProperty { get; set; }
o zaman yaklaşımını tekrar gözden geçirmelisin. Birim testinin davranışı test etmesi gerekiyor ve yukarıdaki kod satırında davranış yok. Bununla birlikte, bir yerde kodunuzda bir bağımlılık yarattınız, çünkü bu özellik neredeyse kesinlikle kodunuzda başka bir yere yönlendirilecek. Bunu yapmak yerine, gerekli özelliği parametre olarak kabul eden yöntemleri yazın:
public string SomeMethod(string someProperty);
Artık, yönteminizin kendisinin dışındaki bir şeye bağımlılığı yok ve artık tamamen kendi kendine yeten olduğundan daha test edilebilir. Verilmiş, bunu her zaman yapamayacaksınız, ancak kodunuzu daha test edilebilir olma yönünde hareket ettiriyor ve bu kez gerçek davranış için bir birim testi yazıyorsunuz .