Bir entegrasyon testini kaldırmak için yeterli birim testi kapsamım olup olmadığını nasıl anlarım?


15

Eski bir sistem üzerinde çalışıyorum (bu yüzden testsiz yazılmıştır). Dışarıdan işlevselliği test eden entegrasyon testleri yazarak sistemin bazılarını test etmeye çalıştık.

Bu, kodun parçalarını kırma endişesi olmadan yeniden düzenleme konusunda bana güven veriyor. Ancak sorun, bu entegrasyon testlerinin bir dağıtım (2+ dakika) ve çalışması için çok dakika gerektirmesidir. Ayrıca, korumak için bir acıdır. Her biri binlerce kod satırını kapsar ve biri bozulduğunda neden hata ayıklamak saatler alabilir.

Son zamanlarda yaptığım bu fonksiyonel değişiklikler için çok sayıda birim test yazdım, ancak taahhütte bulunmadan önce, hiçbir şey kaçırmadım. Bu noktada birim testlerimi biliyorum ve entegrasyon testlerinin bazıları test ettikleri ile örtüşüyor.

İyi entegrasyon testlerimin, o entegrasyon testini silebilmem için kötü bir entegrasyon testini yeterince kapsadığını nasıl bilebilirim?

Yanıtlar:


18

En kolay ölçüm, "bu entegrasyon testi ne zaman meşru bir şekilde başarısız oldu?" Entegrasyon testinin başarısız olmasından bu yana uzun zaman geçtiyse (çok fazla değişiklik oldu), birim testleri muhtemelen yeterince iyi bir iş çıkarıyor demektir. Entegrasyon testi son zamanlarda başarısız olduysa, birim testlerinde yakalanmayan bir kusur vardı.

Tercihen entegrasyon testlerinin sağlamlığını, gözetimsiz bir şekilde güvenilir bir şekilde çalıştırılabilecekleri noktaya çıkarmak olacaktır. Koşmaları uzun sürüyorsa, bir gecede çalıştırın. Sadece ara sıra çalıştırılsalar bile hala değerlidirler. Bu testler çok kırılgansa veya manuel müdahale gerektiriyorsa, bunları çalışmaya devam etmek için harcanan zamana değmeyebilir ve en sık başarılı olanları atmayı düşünebilirsiniz.


3
Testlerin otomatikleştirilmesini öneren +1, çünkü bu "Neden otomatik bir testi öldür?"

1
Evet, buna katılıyorum. Tabii ki, eğer yeterince iyi bir birim test kapsamına sahip değilseniz, yine de sizi ısırmaya geliyor. Örneğin, şu anda çalıştırılması yaklaşık 6 saat süren bir entegrasyon test
paketimiz

2
Belki de bunun için yeni bir soru başlatmalıyım, ancak bir entegrasyon testi meşru bir şekilde başarısız olduğunda, aynı zamanda başarısız olan bir birim testinin nasıl yazıldığını ve her ikisinin de geçmesini sağlamanızı mı önerirsiniz?
Daniel Kaplan

2
@tieTYT: Evet, bu kesinlikle iyi bir fikir gibi geliyor. Birim testleri iyidir; Daha önce kırılmış olduğunu bildiğiniz şeyler için birim testleri daha da iyidir.
Greg Hewgill

7

Ünite testleri, testin kutsal kâsesi değildir, bir kod tabanını test etmek için kullanılması gerekenlerin çoğundan sadece bir araçtır. Bu nedenle, diğer testlerin yerine hiçbir miktar birim testin güvenli olduğu düşünülmemelidir. Kötü bir entegrasyon testiniz varsa, onu iyi bir entegrasyon testi yapmak için çalışmalısınız, başka bir şeyle değiştirmeyin, yani ön kapınızı bir çevre çitiyle ve bir kapıyla değiştirmek gibi.


Bu proje sıfırdan başlasaydı bu benim için daha anlamlı olurdu. Ama ilk entegrasyon testim "giriş yapabildiğinizi kontrol edin" ve sonunda "giriş yapabileceğinizi kontrol edin" diye bir çok birim test yaptım. Html'yi değiştirirseniz tümleştirme testi her zaman çöker. Bu örnek tamamen onaylanmıştır, ancak entegrasyon testini kaldırmak için iyi bir durum değil mi?
Daniel Kaplan

3
@tieTYT: Kullanıcı arayüzünden bir şey test etmek çoğu zaman çok kararsız bir çözüme yol açar. Bununla birlikte, kullanıcı arayüzü tarafından test etmek önemlidir, buradaki manuel testlerin bazen bu testi otomatikleştirmeye ve dengede tutmaya çalışmaktan daha az çaba göstermesi söz konusudur. Bu durumda durum böyle olduğunu düşündüğünüzde, o "entegrasyon testini" otomatik test listesinden çıkarabilir ve manuel testlerin test planınıza ekleyebilirsiniz.
Doc Brown

@DanielKaplan entegrasyon testini daha kararlı hale getirmek mümkün mü? Eğer html bazen değiştiği için başarısız olursa, muhtemelen "kullanıcı adı giriş yaptıktan sonra bu div içinde görünür" gibi daha spesifik bir şey yerine "giriş yaptıktan sonra sayfada kullanıcı adı görünür" gibi bir şeyi test edin
Jen
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.