2013-10-15 11 views
9

में दिए गए/कब/फिर के कई समूह होना ठीक है, मैं गेरकिन में स्वीकृति परीक्षण लिख रहा हूं जहां मैं प्रारंभिक कार्रवाई के आधार पर एक वेब ऐप के यूआई में कई बदलावों की जांच करना चाहता हूं।क्या एक सिंगल गेरकिन परिदृश्य

 Scenario: Cancel editing a new text asset 
      Given the user "[email protected]" is logged in 
      When the user navigates to "/build/" 
      And the user clicks the "Sandbox" link 
      And the user inputs "Test story for canceling editing of a new text asset" for the "title" field 
      And the user inputs "Test User" for the "byline" field 
      And the user inputs "My summary, so exciting!" for the "summary" textarea 
      And the user clicks on "Untitled Section" in the section list 
      And the user clicks the "Text" icon in the "center" container 
      And the user inputs the following text in the rich text editor: 
        """ 
        Test text for asset. This is cool. 
        """ 
      And the user clicks the "cancel" button 
      Then the following text is not present: 
        """ 
        Test text for asset. This is cool. 
        """ 
      And the "Image" icon is present 
      And the "Text" icon is present 
      When the user refreshes the browser 
      And the user clicks on "Untitled Section" in the section list 
      Then the following text is not present: 
        """ 
        Test text for asset. This is cool. 
        """ 
      When the user opens the asset drawer 
      Then the following text is not present: 
        """ 
        Test text for asset. This is cool. 
        """ 

नोट जब/फिर चरण के कई समूहों, प्रारंभिक कार्रवाई की प्रतिक्रिया के लिए परीक्षण करने के लिए देखते हैं कि: यहाँ एक उदाहरण है। जबकि चरणों के अधिकांश कार्यान्वयन उपसर्ग कीवर्ड को अनदेखा करते हैं, और मुझे पूरा यकीन है कि मैं यह परीक्षण चलाने के लिए प्राप्त कर सकता हूं, क्या अलग-अलग परिणामों का परीक्षण करने का एक बेहतर तरीका है? क्या एक ही सेटअप के साथ कई परिदृश्य लिखना बेहतर है लेकिन अलग-अलग "फिर" कथन?

+0

हम्म पढ़ें। क्या यह संभव है या नहीं, इस सवाल का जवाब नहीं देता है। अब और अधिक Google खोज पर ... – djangofan

+0

संभावित डुप्लिकेट [क्या यह "Givenkin में तब दिया जाता है जब" फिर दिया जाता है?] (Https://stackoverflow.com/questions/12060011/is-it- अस्वीकार्य- टू-राइट-ए-दी-दी-फिर-कब-फिर-टेस्ट-इन-गेरकिन) –

+0

मैं स्वीकार किए गए उत्तर से असहमत हूं; मैंने [मेरा जवाब] जोड़ा [https://stackoverflow.com/a/45245799/634576) जिस प्रश्न के लिए यह एक डुप्लिकेट है। –

उत्तर

19

याद रखें कि आपको एक समय में केवल एक व्यवहार/सुविधा का परीक्षण करना चाहिए। अंगूठे का नियम है कि आप का उपयोग करना चाहिए है केवल एक ही जब कदम:

Given some state before action 
    And some other state before action 
    ... 
When only one action 
Then assert correct output 
    And assert correct output 
    ... 

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

आपको अंतर्निहित तर्क को छिपाने की भी आवश्यकता है, क्योंकि जब भी आप कुछ अप्रासंगिक बदलते हैं तो आप इसे बदलना नहीं चाहते हैं। उदाहरण:

और उपयोगकर्ता इनपुट "मेरा सारांश, इतना रोमांचक!" "सारांश" textarea

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

When the user describes it as "so exciting!" 

लेकिन फिर भी, पूरे परिदृश्य की संरचना खराब है। अपने आप से सवाल पूछें: मैं क्या देखना चाहता हूं? मैं देखना चाहते हैं, तो मैं एक व्यक्ति की सुविधा के व्यापार तर्क को समझने के लिए चाहता है कि थे कुछ की तरह:

Scenario: Cancel editing a new text asset 
    Given I edit the Sandbox details with some data 
    When I cancel editing 
    Then Sandox details should be empty 

यह है कि!

इसे कैसे प्राप्त करें? सभी अप्रासंगिक तर्क को गहराई से ले जाएं, PageObject pattern आदि का उपयोग करें और Specification By Example

+0

आपकी सहायक प्रतिक्रिया के लिए धन्यवाद। मैं यह सुनता हूं कि चश्मा एक फीचर के कोर बिजनेस लॉजिक को प्रतिबिंबित करने के बारे में क्या कह रहे हैं और इस तरह उन्हें भविष्य में सबूत बनाते हैं। क्या यह सुविधा के आसपास विशिष्ट UI कार्यान्वयन का परीक्षण करने के लिए सुविधाओं/परिदृश्यों का उपयोग करने के लिए अनुचित है? यदि हां, तो बेहतर फिट क्या होगा? मैं समझता हूं कि मेरे उदाहरण में, सुविधा और एक विशेष UI घटक के बीच की सीमा के बीच कुछ अस्पष्टता है। –

+0

1. यूआई परीक्षण के लिए केवल gherkin का उपयोग करें (प्रयुक्त उपकरण, ढांचे इत्यादि के कारण) यह करने का सबसे तेज़ तरीका है। 2।यदि आप दूसरों के साथ काम करने के लिए गेरकिन का उपयोग करते हैं तो उपयोगकर्ता लक्ष्यों पर ध्यान केंद्रित करते हैं, यूआई नहीं और अंतर्निहित तर्क को लपेटने के लिए पेजऑब्जेक्ट का उपयोग करते हैं। पूर्व उपयोग के लिए सबसे तेज़ उपकरण - ज्यादातर समय व्यवसायी लोग टेक्स्टारे और इनपुट फ़ील्ड के बीच मतभेदों से परेशान नहीं होते हैं। उदाहरण के लिए मैं यूआई तर्क का परीक्षण करने के लिए केवल पेजऑब्जेक्ट्स + जावास्क्रिप्ट यूनिट परीक्षण का उपयोग करता हूं, क्योंकि हमारे मामले में यह सबसे तेज़ दृष्टिकोण है। –

+1

गेरकिन आपके व्यापार नियमों को कवर करने के लिए है, न कि आपके कोड। बीडीडी आवेदन डिजाइन के बारे में है, आवेदन परीक्षण नहीं। यदि आपके पास कार्यात्मक तत्व हैं जिन्हें आपको परीक्षण की आवश्यकता है, तो एक कार्यात्मक परीक्षण ढांचे, या यूनिट परीक्षणों का एक व्यापक सेट का उपयोग करें। –

संबंधित मुद्दे