Birim ve entegrasyon testlerini ayırmalı mıyım?


17

Bir proje için birim testleri ve entegrasyon testleri yazmam gerekiyor.

  • Tüm testler tek bir test klasörüne konulmalı mı?
  • Yoksa birim testleri ve entegrasyon testlerinin her biri ayrı bir test klasöründe olmalı mı?
  • Yoksa onları ayrı projelere mi koymalıyım ?

Onları bir arada tutarsam, bu yaklaşımın herhangi bir avantajı veya dezavantajı var mı?


1
Bir CI ortamında çalışıyorsanız, önemli olan, entegrasyon testleri her zaman derleme sunucusunda çalışmadığı için kolayca (öznitelik vb. İle) tanımlanabilmeleridir.
Robbie Dee

Yanıtlar:


18

Genel olarak: evet, entegrasyon testlerini ve birim testlerini farklı klasörlere koymalısınız. Çoğu zaman, programcılar bu iki tür test arasında net bir çizgi çizmez ve sadece ne tür bir testin faydalı olduğunu yazar. Ancak entegrasyon testleri daha yavaş olma eğilimindedir, çünkü bunlar genellikle şunları içerir:

  • Veritabanı sorguları
  • Ağ istekleri
  • Zamana bağlı davranış
  • Büyük miktarda veri

Aksine, bir birim test herhangi bir pahalı işlemi alay eder, bu yüzden birim testler hızlı bir şekilde çalışma eğilimindedir (aslında, testi çalıştırmanın en yavaş kısmı genellikle test çerçevesinin kendisidir).

Bir programcı sistem üzerinde çalışırken bir düzenleme-test döngüsünde olurlar. Test geri bildirimi ne kadar hızlı olursa ve döngü ne kadar kısa olursa, o kadar verimli olurlar. Bu yüzden orada sadece hızlı bir şekilde tamamlanan önemli bir test yapmak istiyoruz. Test paketinin tamamı yalnızca KG sürecinin bir parçası olarak, örneğin bir CI sunucusunda yürütülür.

Bu, büyük test paketlerinin kategorize edilmesi gerektiği anlamına gelir. Yalnızca belirli bir bileşen için birim testleri seçebilir miyiz? Yavaş testleri hariç tutabilir miyiz? Bunu yapmanın basit bir yolu, farklı dizinlerde farklı test paketlerini korumaktır. Yalnızca çok az testiniz varsa, bir programcı bir test alt kümesini kolayca seçebildiği sürece tek bir dizin de iyi olur.

Bir programcının hızlı bir şekilde geri bildirim almasına izin veren ne olursa olsun iyidir. En kapsamlı test paketi düzenli olarak yürütülüp yürütülmediği önemli değildir.

Daha fazla okuma:


Klasörleri ayırırken, her birini üretim koduyla aynı pakette tutuyor musunuz (böylece korumalı yöntemleri test edebilirsiniz)? Örneğin, birim testleri için bir maven modülü ve entegrasyon testleri için başka bir maven modülü yaparsınız. Bunun gibi, bunları ayırabilir ve korunan yöntemleri kolayca test edebilirsiniz.
ihebiheb

@ihebiheb Java'da, paket görünürlüğünün kullanılması oldukça hoş karşılanır. Bazı durumlarda, onu kullanmak ve bu API'lara birim testlerinden erişmek yararlı olabilir. Ancak genel olarak, bu gereksizdir. Entegrasyon tarzı testlerin hiçbir zaman paket özel üyelerine erişmesi gerekmez. Testlerin ayrı bir Maven projesine dahil edilip edilmeyeceği, bunları nasıl çalıştırmak ve dağıtmak istediğinize bağlıdır. Burada neyin mantıklı olduğunu söyleyebilmek için Java / Maven'e değilim.
amon
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.