SORU
8 ŞUBAT 2010, PAZARTESİ


ScalaTest ve Scala Görüşler birim test çerçeveler arasındaki fark nedir?

Hem BDD Scala Scala yazılmış (Güdümlü Geliştirme Davranış) yetenekli birim test çerçeveler vardır. 38**üzerine . inşa edilmiştir ^/grev>ayrıca ScalaTest çerçeve dahil. Ama Görüşler ScalaTest sunmuyor. Farklar nelerdir?

CEVAP
26 ŞUBAT 2010, Cuma


Gözlük ve ScalaTest mutlu kullanıcılar ile iyi araçları hem de vardır, ama birçok yönden farklıdır. Muhtemelen Scala ana test aracı olarak bir tane almak isteyeceksiniz, ama iki adet kullanabilirsiniz çünkü diğer vazgeçmek zorunda değilsiniz. Senin gibi ScalaTest FeatureSpec sözdizimi ve özellikleri' örneğin sözdizimi Mockito, sınıf içinde hem jar dosyaları koymak ve aynı anda ikisini de kullanabilirsiniz. Burada denemek ve temel tasarım felsefesi fark ettim farklılıklar gözlük ve ScalaTest arasında yakalarım.

Muhtemelen araçlar arasındaki temel fark, felsefi görüşler Davranış Odaklı Geliştirme (BDD) için tasarlanmış, ScalaTest daha genel ise. ScalaTest birlikte sınav dersleri, BDD de dahil olmak üzere tercih ettiğiniz davranış almak için karıştırabilirsiniz özellikleri sağlar, ve ayrıca eğer farklı bir şey isterseniz kolayca kendi davranışını tanımlayabilirsiniz.

ScalaTest destekler BDD yoluyla Spec, FeatureSpec, WordSpec, FlatSpec, ve GivenWhenThen özellikleri, ve aynı zamanda has özellikleri olan karışımı için iyi bir eşleştirici sözdizimi. "Eğer sana ShouldMatchers karışımı." gerektiği gibi Eğer isterseniz "olmalı", mix MustMatchers. Ama BDD senin gibi ama eşleştirici sözdizimi gibi gitmezse, sadece matchers bir özellik karıştırma olmadan ScalaTest özel özelliklerinden birini kullanabilirsiniz. Özellikleri genişletmek Şartname dersi var, ve kelime kullanmanız gerekir "gerekir" eşleştirici ifadeler. Burada aşikar olan büyük bir felsefi fark ScalaTest senden çok daha fazla seçenek sunar. Seçim bu uzay gezinmek için daha kolay hale getirmek için, bir karar ağacı burada bulunur:

http://www.scalatest.org/quick_start

Eşleştirici sözdizimi de ScalaTest ve görüşler arasında farklıdır. İçinde ScalaTest operatörü gösterim ile gidebileceğimi görmek istedim, ve çok fazla İngilizce cümleler, kelimeler arasındaki boşluk gibi okumak eşleştirici ifadeleri ile sona erdi. Gözlük eşleştirici sözdizimi birlikte kelimeler camel durumda daha fazla çalışır.

Gözlük tasarımı tutum farkı yansıtır bence bu ScalaTest ve daha matchers vardır. Aslında eşleştirici sözdizimi muhtemelen 2/3 ve serbest bırakılması için yaptım kabul kesilmiş. Gelecek sürümlerde daha fazla matchers katacak, ancak kullanıcılar aslında ben eklemeden önce bir şeyler istediğini biliyordum emin olmak istedim. Ancak ScalaTest. matchers, dinamik özellik eşleştirici içerir sözdizimi laçka bir kısmı kaplıyor. Görüşler, örneğin java.io.File bir yaz günü

file must beDirectory

Bu isDirectory çağırmak ve doğru olduğundan emin olun. ScalaTest java.io.Files için herhangi bir özel matchers, şu anda yok, ama ScalaTest, böyle dinamik bir kontrol kullanabilirsiniz:

file must be a ('directory)

Her zaman be, yansıması (bu durumda) bir yöntem veya alanı directory adında bir yöntem isDirectory adında aramak için kullanır sonra bir sembol geçirir. Ayrıca bu statik yapmak için bir yol, BePropertyMatcher genellikle kod sadece 2 veya 3 satır gerektiren) tanımlayarak var. Yani temelde ScalaTest işlevselliği daha az API ile daha fazla sağlamak için çalışıyorum.

Başka bir genel tutum tasarım özellikleri ve ScalaTest arasındaki fark örtülü dönüşüm içerir. Varsayılan olarak her şeyi === operatör koyar olan ScalaTest kullandığınızda sadece tek bir örtük dönüştürme. Eğer ihtiyacınız varsa, "kapat" kod. tek bir satır ile Bu örtük dönüştürme yapabilirsiniz Bunu yapmak için ihtiyacınız olacak tek sebebi ise === kendi operatörü olan bir şeyi test etmeye çalışıyor olsaydın, bir çatışma olsun.) ScalaTest diğer birçok örtülü dönüşüm tanımlar, ama açıkça "bir" özellik karıştırma veya ithalat yaparak. kodunuzu içine davet etmek gerekir bunları kullanmak için Görüşler sınıf Specification geliştirdiğinde hemen hemen varsayılan olarak örtülü dönüşüm onlarca al bence. Emin değilim ne kadar olacak bu konuda bir uygulama ama bence öyle insanlar istiyorum test etmek için kullandığı kod kendi implicits, ve bazen olabilir bir çatışma arasında test çerçevenin implicits ve bu üretim kodu. Böyle olunca görüşler daha ScalaTest bu soruna geçici bir çözüm bulmak için daha kolay olabilir bence.

Fark ettim ki tasarım tutum içinde başka bir fark operatörleri ile konfor. Vardı bir gol herhangi bir programcı ScalaTest kullanan başka birinin test kodlarına GÖRE ANLAMI bir şey ScalaTest belgelerine bakmak yok ne olduğunu tahmin etmek mümkün olacaktır. İstemci kod ölü bariz damla olmak ScalaTest istedim. Bu amaç ScalaTest kendisi tecelli bir şekilde operatörler hakkında çok muhafazakar. Ben sadece ScalaTest beş operatörleri tanımlamak:

  • Demek ki === eşittir
  • Daha büyük demektir >,
  • < az
  • * *25, eşit veya daha büyük
  • <=, daha az veya eşit.

İşte bu kadar. Bu her şey demek gibi görünüyor. Başkasının kodunu görürseniz:

result should be <= 7

Umudum API belgelerine <= ne demek olduğunu tahmin etmeye çalışmasına gerek yok. Buna karşılık, gözlük operatörleri ile çok daha özgür. Yanlış bir şey, ama bir fark vardır. Operatörler yapabilirsiniz kod daha kısa, ama bedeli vardır gerekebilir çalıştırmak için belgeleri ne zaman seni bulmak gibi şeyler ->-, >>, |, |>, !, ya ^^^ (tüm sahip özel bir anlam Özellikleri) iş arkadaşlarınızın test kodu.

Bir diğer felsefi fark olduğunu ben denemek ve yapmak biraz daha kolay ScalaTest için kullanmak fonksiyonel bir stil zaman paylaşmalısın Fikstür, oysa Gözlük varsayılan olarak devam ediyor geleneğinin setUp tearDown yaklaşım popüler tarafından JUnit, hangi ata vars önce her test. Ancak eğer bu şekilde test etmek isterseniz, aynı zamanda ScalaTest çok kolay. Sadece BeforeAndAfter sürekli karıştırmak gerekiyor.

Daha fazla içgörü için ScalaTest, seyredersin, "Yüksek ScalaTest ile 2009 Devoxx konferansında burada verdim" sunum:

http://parleys.com/play/514892260364bc17fc56bde3/chapter0/about

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • ELawshea

    ELawshea

    26 Mayıs 2008
  • Attempts at least

    Attempts at

    1 Ocak 2007