Birim testleri olarak adlandırılan Fonksiyonel Test Üzerine Uygun Birim Testlerine somut avantajlar nelerdir?


9

Üzerinde çalıştığım bir projede, uygun şekilde alay edilmeyen bir sürü eski test var. Bu nedenle sahip olduğu tek bağımlılık, statikleri, bağımsız değişkenleri olan yapıcıları, vb. Bu durumları ele almak için powermock eklemek, mevcut projeyi desteklemek için yükseltme ihtiyacı nedeniyle maliyet engelleyici olarak düşürülmektedir (Başka bir tartışma).

Sorularım, GERÇEK dünyayı geri itmek için kullanabileceğim uygun birim testinin somut faydaları nelerdir? Orada hiç? Kötü ünite testlerinin (çalışıyor olsalar bile) kötü olduğunu söyleyerek sadece bir çöp adam mıyım? Kod kapsamı aynı derecede etkili midir?


3
Belki de yazdığınız kod, daha test edilebilir hale getirmek için bazı yapısal değişikliklerden yararlanabilir. Birim testlerini alaycı bir çerçeve olmadan tesisimizde kapsamlı olarak kullanıyoruz ve bizim için oldukça iyi çalışıyor gibi görünüyor.
Robert Harvey

Vay canına, bunu üçüncü taraf JAR entegrasyonu ile nasıl yönettiğinizi görmek isterim. Herhangi bir örneğiniz veya bağlantınız var mı?
Jackie

1
Üçüncü taraf JAR entegrasyonunu kullanmıyoruz. :) Ancak, gerektiğinde taslaklar oluşturuyoruz; alaycı çerçeveler sadece bunu başarmak için bir kolaylıktır. Ancak bu süreç çok zorlu olursa, kodlama yaklaşımımızı yeniden düşünürüz.
Robert Harvey

Yanıtlar:


8
  • kaynaklar

    Testleri çalıştırmak için bir test veritabanına ihtiyacınız vardır. Veritabanını çalıştıracak donanım powermock kullanmaktan daha pahalıdır. Birim testi için kullanılan kaynakların veritabanına bırakılması, şirketin sunucuyu en kısa sürede yükseltmesine gerek olmadığı anlamına gelir.

  • Güvenilirlik

    Veritabanı bozuk veya tutarsız bir durumda olduğundan sınama başarısız olabilir. Tahmin edin, derlemeleriniz başarısız oldu, çünkü DBA'lar bazı yükseltmeleri yapmak için gün boyunca dev sunucusunu devirdi (ve şimdi geliştiriciler kodda neyin yanlış gittiğini anlamaya çalışıyorlar - kod değil).

  • Ek bakım

    Testler herhangi bir sırayla yapılabilir. Bir test eklemek veya kaldırmak test paketinin başarısız olmasına neden olmamalıdır. Bir veritabanına karşı çalıştırmak, bir yerde (veritabanında) bir durum olduğu anlamına gelir. Genellikle, bu sınamalar, veritabanının bir sonraki sınamanın çalıştırılması için uygun durumunu korumasını sağlamak için ek bakım gerektirir.

  • eşzamanlılık

    İki geliştirici aynı anda birim testlerini gerçekleştirir. Bir veritabanına sahip olmak, testlerin veritabanında çarpışabileceği anlamına gelir. Bunun çözümü, gerçek bir veritabanında engelleyici olan, çalıştırılan her test için veritabanını klonlamak olacaktır. Hangi dikkate başka bir seçenek yol açar.

HSQLDB'yi kullandığınız veritabanı lehçesi ile kullanmayı da düşünün . Bu şekilde her test için bir bellek içi veritabanı oluşturulabilir. Birim testi çalışır, gerekli veritabanını oluşturur, verileri yükler, koddan veritabanı bağlantısı HSQLDB'ye bağlanır ve test verilerine karşı çalışır.


4

Sorularım, GERÇEK dünyayı geri itmek için kullanabileceğim uygun birim testinin somut faydaları nelerdir?

İyi birim testleri (Temiz Kod uyarınca ve başka yerlerde):

  • Hızlı
  • Bağımsız
  • tekrarlanabilir
  • Öz Sınamayan
  • vakitli

Doğru birim testlerinin yapılmaması ilk üçünü (ve genellikle sonuncuyu) ihlal eder. Bu, bazı önemli sorunlara yol açar:

  1. Testleriniz yavaş. Yavaş testler seyrek yapılır. Gerçekleştirilmeyen testler neredeyse işe yaramaz.
  2. Testleriniz, test ettiğiniz kodla ilgili olmayan nedenlerden dolayı başarısız olabilir. Bu, testlerin neden başarısız olduğunu, zaman kaybını ve insanları koddan ziyade çevreyi suçlamaya yönlendirmeyi çok daha zorlaştırıyor.
  3. Veritabanı değiştikçe sonuçlarınız değişir. Testler için iyi bir tutarlı, bakımlı durumda bazı veritabanı almak sıkıcı, can sıkıcı ve hataya açıktır.

Genel olarak, birim testlerde yalıtım eksikliği, yazılması daha uzun, yatırımın daha uzun sürmesi ve kod tabanınıza daha az güven sağlaması gibi daha kötü testlere yol açar. Bu da insanların daha az test yazmasına ya da testleri daha fazla görmezden gelmesine yol açar ki bu da kaosa doğru aşağı doğru sarmaldır.


2

Birim testleri, bir geliştiricinin güvenilir kod sunmasına yardımcı olmak için kullanılan bir araçtır. Patronunuzun düşündüğü gibi düşünürseniz, önerdiğiniz şeyin mantıklı olması durumunda onu ikna edebilirsiniz. Bununla birlikte, bir grup vagonunda bir evangelist olarak sunursanız, kaynakları tahsis edemezsiniz. Birim testlerini eski uygulamalarınıza uyarlamak için zaman ve kaynak harcayarak ona nasıl fayda sağlayacağını açıklamanız gerekecektir.

Eski testlerden bahsettiniz - bu eski kod anlamına gelir. Ne yazık ki, birim testlerini birim testine göre tasarlanmamış koda uydurmak zor, zaman alıcı ve pahalı bir işlemdir. Yararlı sonuçlar sağlayan testleriniz varsa iş durumu daha da zorlaşır ve elde edeceğiniz tek şey (iş vakası POV'sinden) aynı sonuçları veren alternatif testlerdir. Maliyet (zaman) tasarrufuna odaklanmanız gerekecek .....

Tahminimce patronunuz sağlam bir iş vakası sunamayacaksınız çünkü bir tane yok.


Buradan nereden geldiğinizi kesinlikle görebiliyorum, ancak bu iş vakasını nasıl yapacağımı daha çok arıyordum. Sadece marjlardaki kaliteden endişe etmek maliyet engelleyici değildir.
Jackie

1

Tanımladığınızdan, test çerçevesi A'yı sevmediğiniz ve her ikisi de çalışan test çerçevesi B'ye geçmek istediğiniz gibi görünüyor. Emin ve mevcut ve çalışanı kullanın, tekerleği yeniden icat etmek için daha fazla iş yaratmayın, böylece tercih ettiğiniz test çerçevesini kullanabilirsiniz.

Mevcut çalışma kodunu atmayı ve kullanıcılara esasen sıfır fayda sağlamak için büyük miktarlarda zaman ve para harcamayı haklı çıkarmak için ay çerçevesinin en son lezzetini kullanmak istemekten daha fazlasını gerektirir.


Tam olarak bunlar bir çerçeve materyali değil, daha çok testlerin diğer kaynaklara erişmesine izin veren bir materyal değildir. Böylece temelde birim testleri yerine fonksiyonel testler yaparlar. "Çerçeveler" hem JUnit hem de EasyMock'tur (eski sürümler de olsa). YENİ bir bağımlı çerçeve eklemenizi önerdim.
Jackie

1

İyi birim testleri yerelleştirme sağlar. İşlevsel testler size "kullanıcı ekleme işlevi bozuk" diyebilir, ancak iyi bir birim testi size bozuk olduğunu söyler, çünkü birisi veritabanındaki USER.LAST_NAME alanını boş olarak değiştirmiştir. Karmaşık bir test ortamına ihtiyaç duymak yerine küçük değişiklikleri doğrudan test etmek de mümkündür (bazı testler için yeniden başlatılması veya temizlenmesi gerekebilir).

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.