Birim ve entegrasyon arasındaki test boşluğu: Küçük, Bileşen, Birim Entegrasyon Testlerinde Entegrasyon


9

Geçtiğimiz birkaç hafta boyunca, test metodolojimizdeki bir boşluğu nasıl dolduracağımı araştırıyor ve araştırıyorum. Basitleştirilmiş terimlerle birim testleri çok küçük ve geleneksel entegrasyon testleri çok büyük.

Bileşenin kullanıldığı Ave Bher ikisinin de sık olduğu bir senaryo ortaya çıkar C. Ancak Ave Bbiraz farklı gereksinimler var ve hakkında biraz farklı varsayımlar yapmak C. Eğer Avarsayımlarımı nasıl ve nerede test edersem geliştiriciysem C?

Açıkçası A, alay konusu varsayımlarla yapılan birim testler , tek başına Ctest etmek için iyidir A, ancak varsayımları kendileri test etmez.

Başka bir olasılık da birim testleri eklemektir C. Bununla birlikte, bu ideal değildir, çünkü Ageliştirme aşamasındayken, testleri Cgelişen varsayımlarla değiştirmek Aaşırı derecede sakar olacaktır. Gerçekten de Ageliştiricinin birim testlerine C(örneğin harici bir kütüphane) yeterli erişimi olmayabilir .

Bunu daha somut bir örnekle çerçevelemek için: Bunun bir düğüm uygulaması olduğunu varsayın. Ave bir dosyayı (diğer şeylerin yanı sıra) okumaya ve dosya içeriğini aktarılan nesnede depolamaya Bbağlıdır . İlk başta işlenen tüm dosyalar küçüktür ve önemli bir engelleme olmadan senkronize olarak okunabilir. Ancak geliştirici, dosyalarının büyük olduğunu ve zaman uyumsuz bir okumaya geçmesi gerektiğini fark eder . Bu , dosyaları eşzamanlı olarak okuduğunu varsaydığı bir zaman zaman eşitleme hatasıyla sonuçlanır .CCCBCAC

Bu, tam entegrasyon testlerinden izlenmesi son derece zor olan bir hata türüdür ve entegrasyon testlerine hiç yakalanamayabilir. Ayrıca As birim testleri tarafından yakalanmaz çünkü As varsayımları alay edilir. Ancak, sadece Ave sadece egzersiz yapan bir "mini" entegrasyon testi ile kolayca yakalanabilir C.

Bu tür testlere yalnızca birkaç referans buldum. Küçük , Bileşen Entegrasyon Testine Entegrasyon , Birim Entegrasyon Testine. Aynı zamanda resmi TDD birim testi yerine BDD test yönü ile ilgilidir .

Bu test boşluğunu nasıl doldurabilirim? Özellikle - bu tür testleri nereye koyacağım? "Mini" entegrasyon testlerinin giriş Ave girişlerini nasıl taklit edebilirim C? Ve bu testler ile birim testleri arasındaki test endişelerini ayırmak için ne kadar çaba harcanmalıdır? Yoksa test boşluğunu doldurmanın daha iyi bir yolu var mı?


1
AC modüllerinin versiyonunu ve bir çeşit bağımlılık yönetimi kullanmayı düşündünüz mü?
miraculixx


1
@gnat Bahşiş için teşekkürler. Soruyu daha az belirsiz hale getirdim.
mjhm

@miraclixx Öneriniz için teşekkürler. Açıklayabilir misiniz? Blog.nodejitsu.com/package-dependencies-done-right gibi bir şey kastediyorsanız, bunun istediğimden farklı bir sorunu çözdüğünü düşünüyorum. Bahsettiğim bileşenler genellikle bir düğüm modülü olarak bağımsız sürüm için çok küçük - örneğin bir Model veya Denetleyici bileşen dosyası. Ek olarak sürümleme, belirli sorunlar için açık testlerden ziyade güvenlik ve arıza kaynakları hakkında ipuçları verir.
mjhm

Yanıtlar:


6

Bana öyle geliyor ki bileşenlerinizle ilgili temel bir sorununuz var.

C, C'nin yapması gerekenleri yapmalı ve sadece bunu yapmak için test edilmeli, belgelenmeli ve tasarlanmalıdır. C'nin "B'nin ne istediğini yapması" için tasarlandığı bir durum olduğunda, kötüye giden bir ilişkiniz olur; A geldiğinde ve C'nin biraz farklı bir şey yapmasını istediğinde çok netleşir.

Yapmamanız gereken şey, A bağlamında birim testi, özellikle C bağlamında A değil - A'yı bağımsız olarak test edersiniz ve alaycı bir C'nin A'ya sonuçlarını sağlarsınız. C aynı sonuçları vermezse, C'de büyük entegrasyon testlerinizi gerçekleştirdiğinizde yakalanacak bir hata veya tasarım kusurunuz vardır. Birim testi her zaman bu şekilde olmuştur - aynı anda başka bir birimi test ederek bir birimi test edemezsiniz. Birim testi bunu yapmak için tasarlanmamıştır.

Entegrasyon testlerinin "programın tamamı" olması gerekmez, ancak sıklıkla bu şekilde kurulurlar. Bunlar, programın geri kalanını çalıştırmadan A veya C'yi birlikte çalıştıran bir test ekipmanı olabilir (veya kurtulabildiğiniz kadar az). Bu noktada, bu bileşenlerin ne yaptığına ve programınızın geri kalanıyla nasıl etkileşime girdiğine bağlı olarak daha fazla tavsiye edemem, ancak genellikle her iki bileşenin test kapsamını sağlayan bir test ekipmanı yazabilirsiniz. Bunu yapmak için çabaya değip değmeyeceği veya entegrasyonun daha verimli bir şekilde test edilebileceği tüm programın (entegrasyon testlerinin bir alt kümesini çalıştırsanız bile) yalnızca cevaplayabileceğiniz bir şeydir. Çoğu entegrasyon testi birçok bölümden oluşur, bu yüzden umarım sadece bu 2 bileşenle ilgili olanları çalıştırabilirsiniz (ve eğer değilse,


Evet, böyle düşünüyorum. Bu birim testin kapsamının ve amacının ötesindedir. Ne yazık ki bağımlı bileşenlerin mükemmel bir şekilde tasarlandığı, test edildiği ve belgelendiği bir yazılım dünyasında yaşamıyorum. Ve ne kadar az entegrasyon testine sahibiz, kaynak geliştiricilerden ziyade genellikle uçtan uca ve KG uzmanları tarafından ele alınmaktadır. Tahmin edebileceğiniz gibi, karmada yönetim ve organizasyon sorunları var.
mjhm

Sanırım kendi entegrasyon testlerinizi eklemeniz gerekecek, ancak salatalık veya selenyum çalıştırırken onlara birim testleri " müşteri giriş modülünü birim test ediyoruz" diyoruz .
gbjbaanb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.