गिवेन व्हेन (जीडब्ल्यूटी) और अरेंज एक्ट एस्टर (एएए) के बीच अंतर?


13

TDD में Arrange Act Assert (AAA) सिंटैक्स है:

[Test]
public void Test_ReturnItemForRefund_ReturnsStockOfBlackSweatersAsTwo_WhenOneInStockAndOneIsReturned()
{
    //Arrange
    ShopStock shopStock = new ShopStock();
    Item blackSweater = new Item("ID: 25");
    shopStock.AddStock(blackSweater);
    int expectedResult = 2;
    Item blackSweaterToReturn = new Item("ID: 25");

    //Act
    shopStock.ReturnItemForRefund(blackSweaterToReturn);
    int actualResult = shopStock.GetStock("ID: 25");

    //Assert
    Assert.AreEqual(expectedResult, actualResult);
}

BDD लेखन परीक्षण में एक समान संरचना का उपयोग किया जाता है लेकिन दिए गए जब तब (GWT) सिंटैक्स के साथ:

    [Given(@"a customer previously bought a black sweater from me")]
    public void GivenACustomerPreviouslyBoughtABlackSweaterFromMe()
    { /* Code goes here */   }

    [Given(@"I currently have three black sweaters left in stock")]
    public void GivenICurrentlyHaveThreeBlackSweatersLeftInStock()
    { /* Code goes here */   }

    [When(@"he returns the sweater for a refund")]
    public void WhenHeReturnsTheSweaterForARefund()
    { /* Code goes here */   }

    [Then(@"I should have four black sweaters in stock")]
    public void ThenIShouldHaveFourBlackSweatersInStock()
    { /* Code goes here */   }

हालांकि उन्हें अक्सर समान माना जाता है लेकिन मतभेद होते हैं। कुछ प्रमुख हैं:

  1. जीडीडी को सीधे बीडीडी फ्रेमवर्क में एक फीचर फाइल के विनिर्देशन में मैप किया जा सकता है

  2. सादे अंग्रेजी के उपयोग को प्रोत्साहित करके गैर-डेवलपर्स के लिए GWT को समझना आसान है, और प्रत्येक भाग क्या कर रहा है, इसका संक्षिप्त विवरण है।

  3. दिया गया है और तब SpecDlow, और ककड़ी जैसे विभिन्न BDD चौखटे में खोजशब्द हैं

मेरा प्रश्न यह है कि AAA और GWT के बीच कोई अन्य अंतर (नामों के अलावा) हैं? और क्या इसके अलावा कोई कारण है कि ऊपर निर्दिष्ट किया गया है कि एक को दूसरे पर प्राथमिकता दी जानी चाहिए?


3
मुझे 'एक प्राकृतिक भाषा की तरह अधिक पढ़ता है' को छोड़कर कोई अंतर नहीं दिखता है। एक व्यवस्था को देखते हुए, जब कोई कार्रवाई होती है, तो नए राज्य के बारे में चीजों को मुखर करता है। '
सोज़र्ड जॉब पोस्टमस

मुझे लगता है कि आपको कुछ प्रासंगिक बिंदु मिल गए हैं, और अतिरिक्त अंतरों के साथ उत्तर प्राप्त करने की संभावना नहीं होगी। इसकी कीमत के लिए, मैं विशेष रूप से इकाई परीक्षणों के लिए AAA का उपयोग करता हूं क्योंकि प्रारूप पूरी तरह से कार्यप्रणाली-स्वतंत्र है लेकिन छोटे, स्वतंत्र परीक्षणों को प्रोत्साहित करता है।
अमोन

जवाबों:


9

मुझे लगता है कि आपने अपने प्रश्न में अंतरों को बहुत अच्छी तरह से सूचीबद्ध किया है, हालांकि मैं अपने कुछ दृष्टिकोणों पर अपनी राय जोड़ूंगा।

एएए मेरे लिए बहुत उपयोगी है जब मैं अपने कोड का परीक्षण कर रहा हूं। अगर मैं अपने लिए किसी प्रोजेक्ट या लाइब्रेरी पर काम कर रहा हूं, तो एएए वह तरीका है जिससे मैं जाता हूं। यह मुझे अपने परीक्षण को निष्पादित करने के लिए जो कुछ भी स्थापित करने की आवश्यकता है, उसे स्थापित करने देता है और फिर बस परीक्षण करता है । यह सेटअप करने के लिए त्वरित है, और यह सत्यापित करने के लिए त्वरित है कि मेरा कोड मेरी अपेक्षा के अनुसार काम कर रहा है।

GWT व्यावसायिक वातावरण में उपयोगी है, जहां प्रोग्रामर द्वारा किए जाने वाले कार्य को व्यावसायिक मूल्य पर मैप करने की आवश्यकता होती है। व्यावसायिक मूल्य सुविधाओं द्वारा मैप किया गया है, और उम्मीद है कि बग का परिचय न दें। प्रोग्रामिंग कार्यों में सुविधाओं को मैप करने के लिए कई रणनीतियां हैं, लेकिन उनमें से एक आवश्यकताओं के माध्यम से है। मेरे अनुभव में, उपयोगकर्ता द्वारा निष्पादित करने के लिए उपयोगकर्ता के स्तर से लेकर छोटे-छोटे कार्यों तक सभी आवश्यकताओं की आवश्यकता होती है। यह उपयोगी है क्योंकि प्रबंधकों के लिए यह समझना आसान है कि प्रोग्रामर अपने ग्राहकों / उपयोगकर्ताओं को कैसे प्रभावित कर रहा है, और इसलिए प्रोग्रामर अपने व्यवसाय के लिए मूल्य जोड़ रहे हैं

  • उपयोगकर्ता-स्तर की आवश्यकता: गोदाम को देखते हुए कम से कम एन आइटम (ओं) को इन्वेंट्री में रखा जाता है, जब कोई उपयोगकर्ता एन आइटम (ओं) को खरीदता है, तो उपयोगकर्ता को गोदाम जहाज एन आइटम (एस) देता है।
  • सिस्टम-स्तर की आवश्यकता 1: इन्वेंट्री सिस्टम में इन्वेंट्री में एन आइटम (एस) होता है, जब एन आइटम (एस) के लिए एक अनुरोध इन्वेंट्री सिस्टम में इनपुट होता है तो इन्वेंट्री सिस्टम उस प्रकार के आइटम के लिए इन्वेंट्री गणना को कम कर देता है
  • सिस्टम-स्तर की आवश्यकता 2: भुगतान प्रणाली को सूची में एन आइटम (एस) है, जब एन आइटम (एस) के लिए भुगतान प्रणाली में इनपुट होता है तो भुगतान प्रणाली उपयोगकर्ता से एन आइटम (एस) के लिए शुल्क लेती है।
  • ...
  • प्रोग्रामर-स्तर की आवश्यकता 1: दिए गए 5 स्वेटर इन्वेंट्री में हैं, जब 3 स्वेटर इन्वेंट्री से हटा दिए जाते हैं तो 2 सीट सूची में छोड़ दिए जाते हैं
  • ...

इस प्रकार की आवश्यकता संरचना पेड़ की तरह डिजाइन के लिए अनुमति देती है जहां प्रोग्रामर-स्तर की सभी आवश्यकताएँ पेड़ को उपयोगकर्ता-स्तर की आवश्यकताओं को पूरा करती हैं। इस तरह, जब एक प्रोग्रामर-स्तर की आवश्यकता विफल हो जाती है तो आप जानते हैं कि उपयोगकर्ता-स्तर की आवश्यकता किससे प्रभावित है।

इसके विपरीत, एएए परीक्षण ऐसा लग सकता है। यह मेरे लिए बहुत प्रोग्रामर-फेसिंग है और व्यवसाय के लिए उपयोगी नहीं है। यह कहना नहीं है कि आवश्यकताओं की एक समान वृक्ष संरचना एएए परीक्षण रणनीति से नहीं बनाई जा सकती है, लेकिन एएए की भाषा में कुछ भी ऐसा करना आसान नहीं है।

public void Test_CaseWhereThereAreEnoughSweatersLeft() {
    // Arrange
    // setup Sweater Inventory mock (DB mocks, etc)
    // count = 5
    // when The number of sweaters remaining is request, return count
    // when Inventory is requested to remove N items, then count = count - N

    // Act
    // call the Unit Under Test to remove 3 items from inventory

    // Assert
    // the number of sweaters in the inventory is 2
    // the removal should return indicating a successful removal of items from the inventory
}

public void Test_CaseWhereThereAreNotEnoughSweatersLeft() {
    // Arrange
    // setup Sweater Inventory mock (DB mocks, etc)
    // count = 2
    // when The number of sweaters remaining is request, return count
    // when Inventory is requested to remove N items, then count = count - N

    // Act
    // call the Unit Under Test to remove 3 items from inventory

    // Assert
    // the number of sweaters remaining is still 2
    // the removal should return an error indicating not enough items in the inventory
}

मुझे हमेशा यह दिलचस्प लगता है जब लोग सवाल करते हैं कि क्या कंप्यूटर (और इस तरह प्रोग्रामर) अपने व्यवसाय में मूल्य जोड़ रहे हैं। क्या यह वास्तव में सिर्फ एक बड़ा स्वयं सेवक बन सकता है? मुझे लगता है कि एक व्यवसाय प्रबंधक को यह समझने के लिए प्रोग्रामिंग के बारे में या तो पर्याप्त सीखना चाहिए कि यह अपने उद्देश्यों को कैसे पूरा कर रहा है, या बस विश्वास है कि यह करता है और चिंता नहीं करता है। मैं वास्तव में यह नहीं समझ सकता कि आलिंद कोशिकाओं में विलंबित रेक्टिफायर करंट की शुरुआत को प्रभावित करने वाला एक रसायन कैसे काम करता है, लेकिन मैं निश्चित रूप से महसूस कर सकता हूं कि हृदय अतालता नहीं होना कितना अच्छा है।

Abstraction सिर्फ Computer Science के बाहर महत्वपूर्ण है। लोगों को विभिन्न क्षेत्रों में विशेषज्ञता प्राप्त होगी, और यह संवाद करने में सक्षम होना कि दूसरों के साथ विशेषज्ञता एक व्यवसाय के लिए महत्वपूर्ण है। GWT एक अमूर्त है जो प्रोग्रामर और (प्रोग्राम | प्रोजेक्ट) प्रबंधकों को संवाद करने के लिए उपयोगी है। दूसरे, एक प्रोग्रामर के रूप में यह कल्पना करना आसान है कि प्रोग्रामर में किसी व्यवसाय के लिए बहुत कम मूल्य का उत्पादन करने की क्षमता है। अंत में, यह ध्यान देने योग्य है कि GWT केवल प्रोग्रामर और प्रबंधकों के पास संवाद करने का तरीका नहीं है, बल्कि कई उपकरण हैं जो एक व्यवसाय आजमाना चाहते हैं।
फ्रैंक ब्राइस

इसके अलावा, मैं अपने डॉक्टर से यह समझना चाहूंगा कि मेरे दिल की अतालता सुधार तंत्र काम करता है इससे पहले कि वे इसे डालते हैं, न कि केवल यह। GWT परीक्षण "क्यों" का जवाब देने में मदद करने वाले हैं। प्रोग्रामर और उत्पाद प्रबंधक के बीच संचार में मदद करने वाला GWT केमिस्ट और डॉक्टर के बीच संचार के लिए विनम्र है। एक उत्पाद प्रबंधक उपयोगकर्ताओं के साथ संचार करता है कि उन्हें क्या सुविधाएँ मिल रही हैं, जबकि एक डॉक्टर अपने रोगियों को सूचित कर रहा है कि उन्हें हृदय अतालता सुधार के साथ क्या मूल्य मिल रहा है।
फ्रैंक ब्राइस

4

मुझे लगता है कि यह आपके द्वारा उपयोग किए जा रहे ढांचे पर निर्भर है। आम तौर पर, अब तक मेरी समझ में, AAA NUnit ढांचे द्वारा समर्थित है, और इस प्रकार उस संबंध में स्वाभाविक पसंद है। टीडीडी और बीडीडी के बीच सैद्धांतिक अंतर के लिए, वे मामूली प्रतीत होते हैं। इस लिंक को देखें , कोई व्यक्ति आपको स्पष्टीकरण देने के लिए खुद से अधिक योग्य है।


2

कोई फर्क नहीं है।
परीक्षण के तीन राज्य:
दिए गए = व्यवस्था,
जब = अधिनियम,
फिर = जोर।

आपके द्वारा प्रश्न में दिए गए अंतर टीडीडी और बीडीडी के बीच अंतर हैं और जीडब्ल्यूटी और एएए नहीं हैं।

टीडीडी में आपके पास एक परीक्षण के लिए तीन अलग-अलग तरीके हो सकते हैं

public class TestsOfFormatMethod
{        
    public void Arrange() { // set dependencies }
    public string Act() { // return formattted result }
    public string AssertThatFormatIsEmpty()
    {
        Arrange();
        var actual = Act();
        Assert.IsEmpty(actual);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.