Java için BDD çerçeveleri arasındaki farklar nelerdir? [kapalı]


121

Java için her Davranış Odaklı Geliştirme (BDD) çerçevesinin artıları ve eksileri nelerdir?

Örneğin bazılarını burada buldum .

Zaten bir alay kütüphanesi (örn. Mockito ) kullanıyorsam bir BDD çerçevesi kullanmak mantıklı olur mu?


lütfen BDD'yi tanımlayın veya tanıma bağlantı verin
Jason S

4
BDD = Davranış Odaklı Geliştirme
Vinnie

4
Ne yazık ki bu daha fazla cevap alamadı!
Pablo Fernandez

Cuke4Duke için ödülümde salatalık-jvm oku. Ödülü vermek için hala 22 saatim var ...
Sam Hasler

Yanıtlar:


99

Java için üç BDD çerçevesini karşılaştırmayı yeni bitirdim. Elbette bulgularımın son kullanma tarihi oldukça kısa.

Concordion

  • Çok esnek
  • Çok güzel rapor çıktısı
  • Güzel eklenti çerçevesi
  • Yetersiz belgelenmiş. Bunu anlamak için kaynağı okumak zorunda kaldım (neyse ki son derece kaliteli).
  • Fikstürlerin html'ye sıkıca bağlı olması muhtemel görünüyordu.

EasyB

  • Çok sığ öğrenme eğrisi (Groovy olmayan Geliştiriciler için bile)
  • Son derece güçlü DBUnit entegrasyonu
  • Görünüşe göre parametreler için destek yok (ya çok belirsiz öykülere ya da metin ve kod arasında tekrarlamaya yol açar (düzenleme: aslında var ama bunun belgeleri çok iyi gizlenmişti.)
  • Hikaye ve Kod çok sıkı bir şekilde birleştirilmiştir (aynı dosya)
  • Çok basit rapor çıktısı
  • IntelliJ eklentisi işe yaramadı
  • Etkin olmayan topluluk (Maven eklentisi üç aydır bozuk görünüyor - yararlanılacak pek çok kod örneği yok)

JBehave

  • Son derece güçlü ve esnek (örneğin, ön koşul olarak katların bileşimi yoluyla kazan plakasının azaltılması)
  • Kapsamlı (parçalanmışsa) dokümantasyon ve örnekler
  • Farklı çerçeveler ve ortamlar için kapsamlı (ezici olsa da) destek
  • Hikaye dosyalarının koddan mükemmel şekilde ayrılması
  • Oldukça aktif bir topluluğa ve bununla ilgili çok daha fazla örneğe ve web üzerinde tartışmaya sahip görünüyor.
  • Oldukça dik bir öğrenme eğrisi (anlamam Concordion / EasyB'den 3-4 kat daha uzun sürdü)

Cuke4Duke of JDave'yi istediğim gibi deneme şansım olmadı, ama muhtemelen şu anda JBehave için zorlayacağım.


4
+1: buradaki açık farkla en iyi cevap. Bağlantılar ekleniyor.
haylem

35

"artılar ve eksiler" farklı insanlar için farklı şeyler olabilir. Genellikle bir bakarım

  • geliştirme faaliyeti , örneğin yeni sürümler olasıdır veya 2 yıllık son sürümdür.
  • olgunluk , örneğin ne kadar zamandır ortalıkta olduğu, öğreticiler ve hatta kitaplar var mı? (Bu kitapları okumuyorum, bu sadece bir evlat edinme işareti.)
  • araç desteği , örneğin bir Eclipse eklentisi, Ant desteği vb.
  • bağımlılıkların boyutu, kendilerine ait her şeyle birlikte gelen çerçeveleri sevmiyorum. örneğin, alay çerçevemi kendim seçmek istiyorum.
  • bir tür lisans , çalıştığım şirketteki yasal şartlar nedeniyle bu benim için önemli.
  • ilgili araçlarla uyumluluk , örneğin Gherkin dili kullanıyor mu kullanmıyor mu?

Ve bazı çerçevelerden baktım

  • İçgüdü kötü : son etkinlik Mart 2010, iyi : ASF lisansı
  • JDave kötü : eşleştiriciler ve alaylarla birlikte gelir, iyi : Ocak 2011'deki son etkinlik, ASF lisansı
  • easyb kötü : son etkinlik Ekim 2010, emin değil : Groovy kullanıyor. Bu uygun olabilir, ancak benim durumumda evlat edinme için bir sorun olur.
  • Beanpec kötü : 2007'de sadece bir sürüm, bu öldü
  • bdoc kötü : son etkinlik Ocak 2010, emin değilim : diğer yöne gitmek, koddan bir rapor oluşturmak gibi görünüyor.
  • kötü spock : belki biraz aşırı, bu tam bir test çerçevesi, sadece BDD değil, iyi : çok aktif, çok havalı.
  • jbehave , Java'daki tüm BDD'lerin "annesi", kötü : çok güçlü = karmaşık, uyumsuz lisans (benim için), hemen hemen her test kitaplığı ve çok daha fazlasıyla birlikte geliyor, iyi : RSpec'e dayalı ve dolayısıyla uyumlu, tutulma eklentileri, maven entegrasyonu , çok aktif topluluk
  • Java için bir BDD çerçevesi olan ginkgo4j , aynı zamanda Ruby'nin RSpec'ini temel alır, ancak yüksek düzeyde bağlamsal, son derece okunabilir testler oluşturmanıza olanak sağlamak için Java lambda's (ek açıklamalar yerine) kullanır. Basit. Çok güçlü. Açık kaynak Apache 2 lisansı.

Taklitlerle ilgili olarak: Kesinlikle bir alaycı çerçeveye de ihtiyacınız var. BDD çerçeveleri yalnızca özellikleri yazmanıza yardımcı olur, ancak bazı testler, özellikle taklitlere veya taslaklara ihtiyaç duyar. yukarıdan aşağıya tasarım yaparken (genel bakıştan detaylara).


jbehave 3 maddeli BSD lisanslıdır: jbehave.org/license.html . Neden birinin buna itiraz edeceğinden emin değilim?
Ramon

Ramon, bağımlılıklarla ilgili. Bunlardan çok var. Belki hepsi Apache veya BSD, kontrol etmeye zahmet etmedim.
Peter Kofler

BDD çerçevelerinin iyi güncellenmiş listesi behaviour-driven.org/Implementations
Paul Verest

JGiven'i bu listeye ekleyebilirsiniz .
Jan Schaefer

20

Java ile kullanılacak en iyi BDD çerçevesi nedir? Neden? Her çerçevenin artıları ve eksileri nelerdir?

İşte Concordion vs. Salatalık ve Java tabanlı Kabul Testi hakkında ilginç bir bağlantı

Burada birkaç tane buldum ama hangisini seçeceğimi bilmiyorum.

Gerçekten, yukarıda bahsedilene bir bakın.

Zaten bir alay kütüphanesi (örn. Mockito) kullanıyorsam bir BDD çerçevesi kullanmak mantıklı olur mu?

Kısa cevap: evet, kesinlikle. Aslında, bir BDD çerçevesi kullanarak kabul testi ve sahte nesneler kullanarak izole edilmiş birim testi o kadar farklı ki soruyu gerçekten anlamıyorum. Kabul testi kara kutu testidir, testler bir iş özelliğinin çalıştığını doğrulamak için kullanılır ve ideal olarak iş analisti tarafından yazılır. Sahte kullanarak izole edilmiş birim testleri beyaz kutu testidir, testler bir birimin çalıştığını ve geliştiriciler tarafından yazıldığını doğrulamak için kullanılır. Her ikisi de yararlıdır ancak tamamen farklı amaçları vardır. Başka bir deyişle, Mockito kullanmak bir BDD çerçevesinin yerini almaz ve tersi de doğrudur.


Söyledikleriniz yanlış değil, ancak bu, birim testlerinizi BDD'ye daha uygun bir tarzda yazamayacağınız anlamına gelmez. Örnek olarak değil, aynı zamanda değersiz bir özellik de değil. docs.mockito.googlecode.com/hg/org/mockito/BDDMockito.html
cwash

7

Başlangıçta BDD'mi düz jUnit ile yaptım ama son zamanlarda JDave'ye bakıyorum çünkü jUnit ile yaptığım şeye neredeyse 1: 1. Ayrıca jUnit'in üzerinde de çalışır, bu nedenle zaten Eclipse üzerinde çalışır ve ayrıca Hudson gibi sürekli entegrasyon sistemlerinde çalışmak üzere yapılandırılması kolaydır. Bunu başkalarıyla gerçekten kıyaslayamıyorum ama JDave ile deneyimlerim şimdiye kadar iyiydi.

Oh ve taklit kullanmak asla aptalca bir fikir değildir! Özellikle TDD / BDD'ye bağlı değillerdir, amaçları genel olarak test yükünü hafifletmektir.


6

Vay canına, konunun sıcak olduğunu görüyorum, birçok güzel cevap ...

İroni bir yana, yakın zamanda BDD'yi keşfettim ve konsepti ilginç buldum. Hey, hem testleri hem de spesifikasyonları yazmaya zorluyor! Göründüğü kadar şaşırtıcı, ikincisi de bazı projelerde eksik olabilir ... Ya da BDD'nin sunmaya zorladığı hassasiyetten yoksun olabilir.

Kalkınma Odaklı Davranış makale bazı iyi makalelere kavramını ve bağlantılar özetlemektedir (Andrew Glover tarafından yazılmış gibi). Dahası, bu konunun konusuna gelince, BDD çerçevelerinin oldukça kapsamlı (sanırım) bir listesini veriyor, bunların çoğu Java için.
Çerçeve seçme problemini çözmez ama en azından aramayı kolaylaştıracaktır ...

BDD büyük ölçüde test kodunun okunabilirliğine dayandığından, hızlı turlara / öğreticiye bakmak ve hangisinin tarzınıza daha uygun olduğunu görmek için iyi bir seçim kriteri olduğunu düşünüyorum. Diğer kriterler, aşina olduğunuz bir çerçeve kaldıraç araçları (birim testi, alay etme), IDE ile kullanım ve benzeri olabilir.


4

Denedim Salatalık-JVM (daha önce Cuke4Duke olarak geliştirilen). Spesifikasyon için, düz metin olarak depolanan Gherkin DSL kullanır.

Eclipse 4.2'de Cucumber-JVM Örneği

JUnit testi olarak çalıştırılabilir. Dolayısıyla, onu kullanmaya başlamak için tek sorun, iş adamlarının veya Ürün Yöneticisinin Kaynaklardaki .features'ı okumasını / yazmasını sağlamaktır.

Sonuçlar


3

Ekibim JBehave kullanıyor . Özellikleri depolamak için düz metin dosyaları kullanır. Her adım (Verilen, Ne Zaman, Sonra) daha sonra adımdan parametreleri çıkarabilen belirli bir yöntemle yürütülür. Senaryolar girintili ve iyi biçimlendirilmiş olabilir, bu da istemciler bunları doğrulamak isterse çok yardımcı olur.

Bazı sorunlar da var. Java 6'ya geçtik. Bazen bazı senaryo adımları yürütme sırasında göz ardı edilir. Böceğin nerede olduğunu bulmak çok fazla soruna neden olabilir.


2
@Boris Sorununuz, PENDING adımlarının başarısız olmak yerine geçiş (varsayılan davranış) olarak sayılması olabilir mi? Sorununuz buysa, PendingErrorStrategy'yi yapılandırabilirsiniz: jarvana.com/jarvana/view/org/jbehave/jbehave-core/2.2.1/…
JeffH

3

Ekibim JBehave'i başarıyla kullandı - EasyB'yi kullandıktan sonra ona geçtik ve düz metin senaryo dosyalarını daha kolay ele aldık.

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.