ما هو الأكثر نضجا BDD الإطار .الشبكة ؟ [مغلقة]

StackOverflow https://stackoverflow.com/questions/307895

  •  08-07-2019
  •  | 
  •  

سؤال

لقد تم استخدام BDD - السلوك مدفوعة التنمية (من دان في الشمال منظور) بوصفها آلية لتسجيل المستخدم اختبارات القبول ودفع التنمية على عدة مشاريع ، لائق النجاح.حتى الآن على الرغم من أننا في الحقيقة لم الآلي الاختبارات نفسها.

أنا أبحث الآن في أتمتة الاختبارات ، ولكن أنا لست متأكدا من السلوك الإطار إلى الوراء.حتى الآن NBehave يبدو أن سلف - لكن هل هناك أي أشخاص آخرين يجب أن تبحث في ؟ هل هناك واضحة 'الفائز في هذه اللحظة ؟

هل كانت مفيدة؟

المحلول

الجواب السريع

واحد مهم جدا النقطة هي أنه هناك اثنين من النكهات من السلوك مدفوعة التنمية. اثنين من النكهات xBehave و xSpec.

xBehave BDD:SpecFlow

SpecFlow (مشابهة جدا الخيار من روبي كومة) ممتازة في تيسير xBehave BDD الاختبارات كما معايير القبول.بيد أنه لا يوفر طريقة جيدة لكتابة الاختبارات السلوكية على مستوى الوحدة.هناك عدد قليل من الآخرين xBehave اختبار الأطر ، ولكن SpecFlow قد حصلت على الكثير من الجر.

xSpec BDD:MSpec

من الناحية الموضوعية.وبالنظر إلى السياق المواصفات والأطر المتاحة ، MSpec قد حول أطول و هو الأكثر استخداما على نطاق واسع السياق/مواصفات إطار في .صافي المجتمع.

أخرى xSpec BDD الإطار:NSpec

أنا شخصيا أنصح NSpec (مستوحاة مباشرة من قبل RSpec بالنسبة روبي).الكشف الكامل ، أنا واحد من واضعي NSpec.يمكنك إنجاز BDD ببساطة عن طريق استخدام NUnit أو MSTest...لكنها نوعا ما تقصر (انها حقا من الصعب بناء سياقات تدريجيا). MSpec هو أيضا خيار و هو الأكثر نضجا السياق/مواصفات الإطار .صافي. ولكن, هناك فقط بعض الأشياء التي هي أبسط في NSpec.

الجواب طويلة

اثنين من النكهات من BDD في المقام الأول لوجود متعامد الفوائد التي تقدمها.

إيجابيات وسلبيات xBehave (GWT الجملة)

الايجابيات

  • يساعد على تسهيل المحادثات مع رجال الأعمال من خلال لهجة مشتركة تسمى (على سبيل المثال.نظرا ...., ونظرا ...., عندما ......, و عندما ..... ثم ...., ثم)
  • اللهجة المشتركة ومن ثم يمكن تعيين التعليمات البرمجية القابلة للتنفيذ التي تثبت أن الأعمال التي كنت فعلا انتهى ما قلت أنك النهاية
  • اللهجة تشنجا ، لذلك فإن الأعمال إلى إزالة الغموض متطلبات وجعلها تنسجم مع الجمل.

سلبيات

  • في حين xBehave النهج هو جيد بالنسبة القيادة عالية المستوى معايير القبول ، دورات في حاجة إلى خريطة الإنجليزية إلى التعليمات البرمجية القابلة للتنفيذ عن طريق سمات يجعل متعذرا في القيادة خارج المجال على مستوى الوحدة.
  • رسم خرائط لهجة مشتركة إلى اختبارات مؤلمة (المنحدر على regex).كل جملة الأعمال يخلق يجب أن يتم تعيين إلى قابل للتنفيذ طريقة عن طريق الصفات.
  • اللهجة المشتركة يجب أن يكون تحت رقابة مشددة حتى أن إدارة الخرائط لا تخرج من يده.في أي وقت يمكنك تغيير الجملة ، عليك أن تجد الطريقة التي تتعلق مباشرة إلى هذه الجملة إصلاح regex مطابقة.

إيجابيات وسلبيات xSpec (السياق/مواصفات)

الايجابيات

  • يسمح المطور لبناء سياق تدريجيا.السياق يمكن إعداد لاختبار بعض التأكيدات يمكن إجراء ضد هذا السياق.ثم يمكنك تحديد أكثر من سياق (بناء على السياق موجود بالفعل) ثم تحديد المزيد من الاختبارات.
  • لا تقيد اللغة.للمطورين يمكن أن يكون أكثر تعبيرا عن كيفية جزء معين من النظام يتصرف.
  • لا رسم الخرائط اللازمة بين اللغة و اللهجة المشتركة (لأن ليس هناك واحد).

سلبيات

  • وليس كما ودود من قبل رجال الأعمال.دعونا نواجه الأمر, الأعمال لا ترغب في إزالة الغموض ما يريدون.إذا أعطيناهم سياق نهج BDD ثم الجملة فقط قراءة "فقط تجعل من العمل".
  • كل شيء في المدونة.سياق الوثائق تتشابك داخل كود (لهذا السبب نحن لا داعي للقلق حول رسم الخرائط الإنجليزية إلى رمز)
  • ليست للقراءة نظرا أقل تقييدا إسهاب.

عينات

على البولينج كاتا هو مثال جيد.

SpecFlow عينة

هنا هو ما مواصفات قد تبدو في SpecFlow (مرة أخرى, هذا هو كبيرة كما اختبار القبول, لأنه يتصل مباشرة مع رجال الأعمال):

ميزة الملف

ملف ميزة هي اللهجة المشتركة من أجل الاختبار.

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
الخطوة ملف تعريف

الخطوة تعريف ملف التنفيذ الفعلي الاختبار يتضمن هذا الملف تعيينات على SpecFlow


[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 العينة ، xSpec السياق/مواصفات


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 العينة ، xSpec السياق/مواصفات

هنا NSpec على سبيل المثال من نفس البولينج كاتا:


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);
    }
}

كما تفعل المزيد والمزيد من BDD ، ستجد أن كل xBehave و xSpec النكهات من BDD هناك حاجة إليها.xBehave هو أكثر ملاءمة اختبارات القبول, xSpec هو أكثر ملاءمة وحدة الاختبارات المجال يحركها التصميم.

MSpec مقابل NSpec

الهدف مقاييس مثل سن والاستقرار يجب أن يكون عاملا وأنا أشجع الجميع أن تأخذ ذلك في الاعتبار.ولكن يرجى أيضا تأخذ في الاعتبار أن أحدث الأطر قد توفر أكثر إيجازا api, أفضل استخدام بنيات اللغة وبناء على الدروس المستفادة من الماضي الأطر.MSpec توفر بنيات معينة ، لأنه و تنظيف..ولكنها تأتي بتكلفة:ثابت التهيئة لجميع أعضاء الطبقة الانفجار وانها نحويا جامدة بسبب استخدام فريدة من نوعها من المندوبين.سوف تجد أن أبسط MSpec الاختبارات أبسط في NSpec.هنا هو أكثر تعقيدا اختبار جناح مكتوبة سواء في MSpec و NSpec.

مقارنة xUnit ، MSpec و NSpec: https://gist.github.com/amirrajan/6701522

روابط ذات صلة

RSpec مقابل الخيار (RSpec قصص)

BDD مع الخيار و rspec هذه زائدة?

نصائح أخرى

SpecFlow .

وإنما هي أداة مستوحاة من الخيار الذي يهدف إلى توفير نهج عملي والاحتكاك لاختبار القبول التنمية المدفوعة باعتبارات والسلوك التنمية المدفوعة باعتبارات للمشاريع. NET اليوم.

والتكامل VisualStudio يبدو واعدا بشكل خاص.

StoryQ يبدو وكأنه بديل لطيف لNBehave مع واجهة بطلاقة. بالتأكيد سوف تحقق من ذلك.

وأنا لا أعتقد أن هناك "الفائز" حقا. وتشمل الأطر الأخرى SpecUnit.NET المشروع و<لأ href = "HTTP: // codebetter كوم / بلوق / aaron.jensen / أرشيف / 2008 / 08/05 / إدخال آلة-مواصفات-أو-mspec مقابل short.aspx "يختلط =" noreferrer "> MSpec يظهر أيضا وعد مع بدايات محول gallio و. من الناحية الفنية منذ آيرن روبي تلوح في الأفق، rSpec <م> قد يكون خيارا لأولئك المستعدين للذهاب نزيف الحافة. قد يكون NBehave + NSpec البكر الإطار مع أفضل التشغيل الآلي، وعلى الرغم من أنني وجدت نفسي القتال ضد بناء الجملة مطول للغاية.

وأود أن تحقق لهم جميعا من واختيار الإطار الذي يناسب المشاريع طريقتك أفضل. انهم جميعا OSS، لذلك من الصعب أن يخسر، والاستفادة الحقيقية هي ببساطة في الانتقال إلى BDD.

وأنا شخصيا أوصي BDDfy التي هي كبيرة في رأيي! انها مفتوحة المصدر، ويدعم الاتفاقية ويجيد وصف السيناريو القائم، ويغطي كلا قبول وحدة الاختبارات كبيرة. يمكنك العثور على جيثب .

إطار روبوت يمكن أن تستخدم أيضا مع و IronPython للقيام ATDD أو BDD في صافي. أعتقد أن قدرات التعبير من الإطار روبوت هي أفضل من مثل. SpecFlow الصورة أو NSpec الصورة. فإنه لا يجبرك على استخدام جملة معينة، ولكن بدلا من ذلك يستخدم نهجا الكلمة مدفوعة. إذا كنت اختبار تطبيقات الويب، فقد Selenium2Library التي توفر الارتباطات إلى السيلينيوم WebDriver.

وهناك أيضا سبكتر ، التي تعرف DSL في بو لجعل كل شيء أكثر طبيعية.

وكنت اذهب عموما لصالح NBehave، جنبا إلى جنب مع MbUnit وأيهما DI / ساخرا الأطر التي تحتاج إليها. انها التعليق عادلة جيم برغر أن NBehave مطول جدا، وأجد نفسي باستخدام القص واللصق في بعض الأحيان. ومع ذلك، فإنه يعمل بشكل ممتاز - أنا باستخدام gallio وفي ReSharper في المكونات، لذلك أنا مجرد الحصول على الاداء نافذة اضافية. لم أحاول ذلك مع ccnet بعد، وإن كان.

وتحقق هذا بلوق وظيفة وتعليقاتها لإلهام الأفكار: HTTP : //haacked.com/archive/2008/08/23/introducing-subspec.aspx/

Concordion.NET ليس فقط الدعم BDD ولكن أيضا الدائرة: http://assertselenium.com/2012/11/05/difference-between-tdd-bdd-atdd/ المواصفات هي مكتوبة في سهل الانجليزية باستخدام HTML.IMHO هذه هي واحدة من الفوائد من Concordion.NET.HTML الوثائق يمكن تنظيمها في للملاحة هيكل لبناء يعيش نظام وثائق.وبما أن اختبارات تشغيل ضد النظام ، يمكنك أن تكون على ثقة الوثائق هو دائما ما يصل إلى التاريخ.

وأنا بدأت في أول نزهة لي في BDD مع تطبيق صغير مع زملائي في الفريق. الأدوات التي يختارون للقيام بهذه المهمة هي: Specflow مع السيلينيوم Webdriver للحصول على xBehave قصص وMSpec مع Machine.Fakes.Moq للحصول على وعاء automocking لدينا وحدة الاختبارات xSpec. مع Resharper على حد سواء لدينا عداء قصة والمواصفات عداء بسبب التكامل بدعم من Specflow وMSpec. وجود التكامل الأصلي في استوديو البصرية مع R # هو سمة رئيسية بالنسبة لنا.

ومنذ لدينا تصميم هو كل MVC3 نحن كما سيتم تطبيق نمط الفصل تشرف لدينا MVC التحكم . وهذا سيسمح لنا لكتابة المواصفات مباشرة ضد تشرف. ثم بالنسبة لنا لكتابة قصص مباشرة ضد استخدام التطبيق لدينا.

منذ أنا الآن التعامل مع BDD على نظام اختبارات السلامة التطبيقات الهامة, يمكنني فقط أن حصة تجربتي التي يجب أن لا نقلل من قوة من "الاختبارات الكتابية في اللغة الطبيعية" بدلا من "رمز".

ركزنا دائما أن نقدم ميزة اللغة أن أي شخص يمكن أن نفهم دون أي خلفية تقنية أو خبرة في البرمجة (انظر specflow المثال أعلاه) و فعلنا جيدا للقيام بذلك.بجانب حقيقة أنني لم أوضح الجملة إلى أي شخص ، الجميع على الفور يفهم معنى الاختبار, المطور, مدير, وحتى تستر.

أنا في أي وسيلة تجنب اختبار مكتوب في لغة البرمجة مثل MSpec الأمثلة أعلاه.إذا لم تظهر مع اختبار مثل هذا في مكتب مدير, وقال انه سوف يطردني.لكنه مهتم في القراءة الخيارة-بناء الجملة على أساس الاختبارات.أكثر الرجال قادرون على قراءة وتعديل الاختبارات أفضل.

وأخيرا وليس آخرا تلك الاختبارات المحمولة إلى أي لغة برمجة أخرى, أي منبر آخر اختبار أداة التشغيل الآلي دون أي تغيير.

مرة أخرى, الجواب هو واحد المزيد من الوقت:

لا أهتم أداة معالمه نفسها ، اختر أداة تسمح لك بسهولة التبديل إلى أداة أخرى في أي وقت دون فقدان المعلومات.أدوات تأتي وتذهب ، اختباراتي ينبغي أن تستمر لفترة أطول.:-)

يمكنني أن أوصي باستخدام SpecFlow.لديك حق الوصول الكامل إلى كاملة .صافي مكتبة كل معالمه ، الاختبارات الخاصة بك البقاء المحمولة.وهذا قد تعطيك ميزة على تماما المحمولة حلول مثل الروبوت الإطار إذا كنت لا تمانع في قابلية.ومع ذلك ، يمكنك دائما تحسين الاستقرار وقابلية النظام باستخدام أدوات مختلفة من أجل تطوير واختبار.حتى اختبار .برامج نت مع بيثون على أساس BDD النهج قد يكون جيد (أو حتى أفضل) فكرة في بعض الحالات.

ومع ذلك ، SpecFlow ظهر كونها مستقرة و واقية من الرصاص في كل يوم الاختبار ، بما في ذلك ليلا بناء الاختبارات ، إلخ.في المشاريع متوسطة الحجم.كما أنه يدمج بشكل جيد في Microsoft اختبار وحدة البيئة.

وكما تحقق UBADDAS ومحددة لضد التعذيب وجدت في

https://github.com/KernowCode/UBADDAS

ومع شرح هنا

http://kernowcode.wordpress.com/ (في حزيران 2014)

ويمكنك كتابة اختبار مثل هذا

[Test]
public void IWantToRegisterANewUser()
{
  var user = new User();
  ICustomer customer = new Customer();

  SoThat(MyBusinessValue.IncreaseCustomerBase)
    .As(user)
    .Given(customer.Register)
    .When(customer.Confirm_Registration)
    .Then(customer.Login);
}

ووتنتج هذه

I want to register a new user
  so that Increase customer base
       as user
    given Register customer
     when Confirm customer registration
     then Login customer
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top