SORU
21 Kasım 2008, Cuma


Ne en olgun BDD Çerçeve için .NET?

Kayıt kullanıcı kabul testleri için bir mekanizma olarak BDD - Behaviour Driven Development (Dan Kuzey perspektifinden) kullanıyoruz ve iyi bir başarı ile bir kaç projeyi, gelişim sürücü. Aslında otomatik olmasına rağmen bugüne kadar kendilerini test eder.

Şimdi testlerini otomatikleştirme için arıyorum, ama geri emin değilim. Şimdiye kadar NBehave görünüyor habercisi olarak - ama bakmam gereken başka birileri var mı? Orada açık bir 'kazanan' şu anda?

CEVAP
7 NİSAN 2011, PERŞEMBE


Hızlı Cevap

Birçok önemligetirmek için bir nokta vardırDavranış Tahrik Geliştirme iki çeşit.İki çeşidi vardırxBehavevexSpec.

xBehave BDD: SpecFlow

SpecFlow (çok benzer cucumber Ruby yığından için) Kabul Kriterleri olarak xBehave BDD testleri kolaylaştırmada mükemmel. Ancak iyi bir şekilde birim düzeyinde davranış testleri yazmak için sağlamaz. Birkaç diğer xBehave test çerçeveler vardır, ama SpecFlow çekiş gücü çok arttı.

xSpec BDD: MSpec

Objektif olarak bakarsak. İçerik özellikleri çerçeveler mevcut verilen, MSpec uzun civarında olmuştur ve en yaygın olarak kullanılan içerik/özellikleri çerçeve .Net topluluk.

Diğer xSpec BDD çerçeve: NSpec

Ben şahsen NSpec (doğrudan Ruby için RSpec esinlenerek) tavsiye ederim. Tam açıklama, NSpec yazarlarından biriyim. Sadece NUnit veya MSTest kullanarak BDD yapabilirsiniz. ama kısa (çok zor bağlamlarda kademeli kurmak için) güz ediyorlar. MSpec da bir seçenektir ve çerçeve için en olgun bağlam/şartname .Net.Amasadece NSpec daha basit olan bazı şeyler vardır.

Uzun Cevap

BDD iki tatlar öncelikle sağladıkları dik avantajları nedeniyle var.

Artılarını ve Eksilerini xBehave (GWT Sözdizimi)

Artıları

  • ortak bir Lehçe ile iş görüşmeleri kolaylaştırmak yardımcı olur (örn. ....Verilen, Ve Verilen ...., ......Zaman, Ve Ne Zaman ..... O zaman ...., Ve Sonra)
  • ortak lehçesi sonra bitireceğini söylemiştin aslında bitmiş bu iş için kanıtlıyor çalıştırılabilir kod eşlenebilir
  • lehçesi iş gereksinimleri belirsizliği ve cümleler içine sığacak kadar da sıkıcı.

İnş

  • XBehave yaklaşım yüksek düzeyde Kabul Kriterleri sürüş için iyi ise, devir İngilizce nitelikleri ile çalıştırılabilir kod olarak harita için gerekli birim düzeyinde bir etki alanı sürüş için olanaksız kılar.
  • Testler için yaygın lehçesi eşleme ACI (düzenli ifade üzerine rampa). İş oluşturur her cümlenin nitelikleri ile çalıştırılabilir bir yöntem eşlenmesi gerekir.
  • Ortak lehçesi eşleme yönetme elden gitmemesi için çok sıkı bir şekilde kontrol edilmelidir. Bir cümle değiştirmek istediğiniz zaman, doğrudan bu cümle ile ilgilidir ve bu nedenle normal ifade eşleme düzeltme yöntemi bulmak zorunda.

XSpec artılarını ve Eksilerini (İçerik/Özellikleri)

Artıları

  • Sağlar geliştirici kapsamında kademeli olarak kurmak için. İçerik testi için ayarlanmış olabilir ve bazı iddialar bu bağlamda karşı yapılabilir. O zaman daha fazla içerik (zaten var olan bağlam üzerine inşa) belirtin ve daha fazla test belirtin.
  • Hayır daraltıcı dil. Geliştiriciler bir sistem belli bir bölümü nasıl davranacağını hakkında daha fazla etkileyici olabilir.
  • Hiçbir eşleme İngilizce ve ortak bir lehçesi arasında bir tane bile yok çünkü) gerekli.

İnş

  • Gibi cana yakın işletme tarafından. Haydi, iş ne istediklerini belirsizliği ortadan kaldırmak için sevmiyorum yüz. Eğer onları bağlam merkezli bir yaklaşım BDD verdik eğer cümle sadece okur "yeter ki yapın".
  • Her şey kod. Bağlam belgeleri kodu (İngilizce kod eşleme hakkında endişelenmenize gerek yok bu yüzden) içinde iç içedir
  • Olarak kaydedebilirsiniz daha az kısıtlayıcı bir laf kalabalığı verildi.

Örnekleri

Bowling Kata oldukça iyi bir örnektir.

SpecFlow Örnek

Belirtimi SpecFlow (yine, bu doğrudan iş ile iletişim kurar çünkü bir kabul testi olarak harika): gibi görünür

Özelliği Dosya

Özelliği dosya test için ortak lehçesidir.

Feature: Score Calculation 
  In order to know my performance
  As a player
  I want the system to calculate my total score

Scenario: Gutter game
  Given a new bowling game
  When all of my balls are landing in the gutter
  Then my total score should be 0

Scenario: Single Pin
  Given a new bowling game
  When I've hit exactly 1 pin
  Then my total score should be 1
Adım Tanım Dosyası

Adım tanım dosyası bu dosya SpecFlow için eşlemeleri içerir testi gerçek yürütme


[Binding]
public class BowlingSteps
{
    private Game _game;

    [Given(@"a new bowling game")]
    public void GivenANewBowlingGame()
    {
        _game = new Game();
    }

    [When(@"all of my balls are landing in the gutter")]
    public void WhenAllOfMyBallsAreLandingInTheGutter()
    {
        _game.Frames = "00000000000000000000";
    }

    [When(@"I've hit exactly 1 pin")]
    public void When1PinIsHit()
    {
        _game.Frames = "10000000000000000000";
    }

    [Then(@"my total score should be (\d )")]
    public void ThenMyTotalScoreShouldBe(int score)
    {
        Assert.AreEqual(score, _game.Score);
    }
}

MSpec Örnek, xSpec, İçerik/Özellikleri


public class describe_BowlingKata
{
    public static Game game;

    public class when_all_balls_land_in_the_gutter : describe_BowlingKata
    {
        Establish ctx = () => game = new Game();

        Because of = () => game.Frames = "00000000000000000000";

        It should_have_a_score_of_0 = () => game.Score.ShouldBe(0);
    }

    public class when_a_single_pin_is_hit : describe_BowlingKata
    {
        Establish ctx = () => game = new Game();

        Because of = () => game.Frames = "10000000000000000000";

        It should_have_a_score_of_1 = () => game.Score.ShouldBe(1);
    }
}

NSpec Örnek, xSpec, İçerik/Özellikleri

Burada, aynı bowling kata NSpec bir örnek:


class describe_BowlingGame : nspec
{
    Game game;

    void before_each()
    {
        game = new Game();
    }

    void when_all_my_balls_land_in_the_gutter()
    {
        before = () => game.Frames = "00000000000000000000";

        it["should have a score of 0"] = () => game.Score.should_be(0);
    }

    void when_a_single_pin_is_it()
    { 
        before = () => game.Frames = "10000000000000000000";

        it["should have a score of 1"] = () => game.Score.should_be(1);
    }
}

Daha BDD gibi, BDD de xBehave ve xSpec tatlar gerekli olduğunu göreceksiniz. xBehave Kabul Testleri için daha uygundur, xSpec daha fazla birim testleri ve etki alanı odaklı tasarım için uygundur.

Vs NSpec MSpec

Yaş ve kararlılık gibi objektif Ölçümler bir faktör olması, ve herkesin bunu dikkate almasını tavsiye ederim. Ama lütfen deyeni çerçeveler daha kısa ve öz bir apı sağlamak, dil yapıları daha iyi kullanımı ve dersleri geçmiş çerçeveleri için öğrendiklerini üzerine inşa olabileceği de dikkate al. MSpec sağlar yapıları Verilen, Çünkü, ve Temizleme..ama gel de maliyet: statik başlatma için tüm üyeleri, sınıf patlama ve sözdizimsel sert çünkü onun eşsiz kullanım delegeler. En basit MSpec testleri NSpec daha basit olduğunu göreceksiniz. Burada daha karmaşık bir test paketi MSpec ve NSpec hem de yazılı.

XUnit, MSpec ve NSpec bir Karşılaştırma: https://gist.github.com/amirrajan/6701522

İlgili Bağlantılar

rspec vs cucumber (rspec stories)

BDD with Cucumber and rspec - when is this redundant?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • disneychannel

    disneychanne

    19 ŞUBAT 2006
  • Eric Magidson

    Eric Magidso

    4 Ocak 2009
  • TotalxLuna

    TotalxLuna

    27 Kasım 2011