Entegrasyon testleri için isim seçme


13

Birim testleri ile alan oldukça küçüktür, bu yüzden kolaydır. Osherove'in methodName_conditions_result()planını kullandım ve çok net buldum.

Ancak entegrasyon testleri ile çok uzun bir isim vermiş gibi hissediyorum ve bunun yerine ne koyacağım methodName? Entegrasyon test sınıflarını nasıl adlandırırım?

Entegrasyon test isimlerinin gerçek dünya örnekleri çok açıktır. Umarım cevaplar bu testleri daha iyi anlamama yardımcı olur.


1
bu soru neden reddedildi (iki kez)?
bigstones

Yanıtlar:


6

Birim ve entegrasyon testleri ile biraz farklı bir yaklaşım benimsiyorum. Onları mümkün olduğunca özelliklere göre adlandırmayı deniyorum. Daha sonra tüm testler geçtiğinde, çalışan ve çalışmayan tüm özelliklerin bir listesini görebilirsiniz.

  • canRegisterUser
  • canHandleInvalidInput
  • canRelayDocumentBetweenServers
  • canCreateSchema
  • canLoginUsingWebService
  • canLoginUsingBasicAuth
  • canDeleteDocument
  • canAddDocument

Testleri bu şekilde adlandırmak her zaman pragmatik değildir, ancak özellikle yüzlerce birim ve entegrasyon testini okuduktan sonra çok yardımcı olabilir. Bu yöntemleri barındıran her şeyi kapsayan Sınıf adı da test edilen özelliklerin göstergesi olmalıdır. Organizasyona yardımcı olacaktır.

Ayrıca, hata düzeltmeleri için herhangi bir birim testinin hata düzeltmeleri için benzersiz bir önekle adlandırılmasını öneririm bugfix1002.


5

Bu, birim testlere yardımcı olmak için gerçekten yazılmıştır, ancak belki de aynı kuralların (aşağı yukarı) entegrasyon testlerine uygulandığını göreceksiniz:

Yedi Adım'a göz atın !

Benim tercihim, ne derseniz deyin, gerçekten test paketi adı (kartımızdaki fikstür adı), kontrol ettiğiniz etki ve göze çarpması ve hatanın nedenini açıklığa kavuşturması gereken onaylama mesajı. Asherove'nin isimlendirilmesinde bunu en kolay bulursanız, bunu yürekten onaylıyorum. Ama belki de hile, "yöntem" bölümünü koşulu, sonucu ve istisnayı mantıklı kılan şeyle doldurmanızdır.

"AccountDoesntExist" adlı bir test ve "Beklenen NonesuchAccount istisnası - hiçbiri alınmadı" yazan bir hatayla "MakingADeposit" adlı bir paketi gördüğüme sevindim.

Alternatif olarak, test takımı adını "::" ile ayırmamın bir sakıncası yoksa, "AccountHandling :: MakingADeposit_AccountDoesntExist_ThrowsAnException" ile sorunum yok

Kart ayrıca iyi bir isminiz yoksa, devam edip size geldiğinde daha iyi bir isim vermenizi önerir (umarım kodu CI'ye göndermeden önce).


2

Entegrasyon testleri, birim testlerine benzer kurallara uymalıdır, çünkü her test bir gereksinimin bir yönünü test etmeli ancak sistemi bir bütün olarak test etmelidir. Sınıf, test edilmekte olan genel şeyi adlandırmalıdır, örneğin "TpcInputValidation" ve yöntemin adlandırılması, testin aşırı derecede endişelenmeden ne yapmaya çalıştığını açık bir şekilde yansıtmalıdır, örneğin "shouldRaiseValidationErrorWithBadDates ()".

Yöntemler, özelliğin bir kavramını test etmelidir ve çok sayıda varsayım aksini gösterebilir. (Ref. "Temiz Kod: Çevik Yazılım İşçiliği El Kitabı" s. 132, Robert Martin).


Neden "bir özellik" in genel olarak "bir iddiaya" eşit olduğuna inanıyorsunuz? Sistemin olmasını istediğiniz durumda olduğunu iddia etmek istersiniz, ki bu herhangi bir sayıda iddia olabilir. Ama konuya giriyorum çünkü soru isimlendirme ile ilgili, bir entegrasyon testinin nasıl yazılacağı değil.
Jeremy Heiler

@Andrew, bunun zor bir kural olduğunu söylemedim, ancak varsayımların sayısını izlemek, her yöntem için bir tane olmak üzere özellik kavramını test etme kılavuzuna yardımcı olabilir. Bunları kapsamda biraz sınırlı tutmak, sorunların başarısız olduklarında nerede olduklarını belirlemeye yardımcı olur. Ama size bir iddia söylemenin harika olmadığını söyleyeceğim ve bunu düzenleyeceğim, teşekkürler.
Anahtar teslimi

1

Sorun şu ki, uygun bir işlevsellik adı bir yöntem adı için çok uzun mu? Test yöntemleri yazmaya benzer isimlerle başlamanın garip olduğunu biliyorum registerAndValidateUnderageUniversityDriverWithCoverageSetA_test()ve uzun yöntem adları için derleyici kurallarını kırabilir (PL / SQL sadece 30 karaktere kadar izin verir - Java ve C # bu tür kısa ad sınırları uygulayıp uygulamadığını bilmiyorum, hatta eğer yapmazlarsa belirli bir noktadan oldukça yararsız bir şekilde geçerler ve gerçekten çok uzun yöntem adları sadece üretilen kod tarafından okunan / yönetilen kod için yararlı olabilir). Bunu kısaltmayı deneyebilirsinizregValUnderageUnivDrvrWCovrgA_test() ancak bu da okumak gerçekten korkunç. Ben sevmedim ama o zaman en iyi seçim oldu kullandım bir seçenek olduunderageUnivDrvr_test_01()ve ardından yöntem adlarını, test edilen işlevin daha uzun bir açıklamasına eşleyen bir elektronik tablo vardı. Çirkin, ama işe yaradı. Ayrıca, testin açıklamasını kaynak dosyadaki işlevin belgelerinde de belgeleyebilirsiniz; bu, e-tablo ve kod arasında ileri ve geri eşleştirmek yerine doğrudan koddan belgelerin belgelerini oluşturabileceğiniz için yararlı olabilir.

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.