iOS टेस्ट / चश्मा TDD / BDD और एकीकरण और स्वीकृति परीक्षण


229

IPhone पर व्यवहार-संचालित विकास के लिए उपयोग करने के लिए सबसे अच्छी तकनीकें क्या हैं? और कुछ ओपन सोर्स उदाहरण परियोजनाएं क्या हैं जो इन प्रौद्योगिकियों के ध्वनि उपयोग को प्रदर्शित करती हैं? यहाँ कुछ विकल्प दिए गए हैं:


इकाई का परीक्षण

टेस्ट :: यूनिट स्टाइल

  1. OCUnit / SenTestingKit जैसा कि iOS विकास गाइड में समझाया गया है : यूनिट परीक्षण अनुप्रयोग और अन्य OCUnit संदर्भ
  2. पकड़
  3. GHUnit
  4. मैक के लिए Google टूलबॉक्स: iPhone इकाई परीक्षण

RSpec स्टाइल

  1. कीवी (जो मजाक और उम्मीदों के साथ आता है)
  2. देवदार
  3. जैस्मीन यूआई स्वचालन के साथ निपुण 'आईओएस-स्वीकृति-परीक्षण चश्मा में दिखाया गया है

स्वीकृति परीक्षण

सेलेनियम शैली

  1. UI स्वचालन (डिवाइस पर काम करता है)

    अद्यतन: Zucchini फ्रेमवर्क ककड़ी और UI स्वचालन मिश्रण लगता है! :)

    पुराने ब्लॉग पोस्ट:

  2. UISpecRunner के साथ UISpec

  3. FoneMonkey

ककड़ी स्टाइल

  1. फ्रैंक और आईक्यूक ( ककड़ी पर आधारित आईफोन से मिलता है बात )

  2. स्क्वायर द्वारा KIF (इट इट फंक्शनल)

  3. Zucchini फ्रेमवर्क टेस्ट लिखने के लिए ककड़ी वाक्यविन्यास का उपयोग करता है और स्टेप परिभाषाओं के लिए CoffeeScript का उपयोग करता है।

परिवर्धन

निष्कर्ष

ठीक है, जाहिर है, इस सवाल का कोई सही जवाब नहीं है, लेकिन यहां मैं वर्तमान में जाने के लिए क्या चुन रहा हूं:

इकाई परीक्षण के लिए, मैंने XCode 4 में OCUnit / SenTestingKit का उपयोग किया । यह सरल और ठोस है। लेकिन, मैं BDD की भाषा को TDD ( टेस्ट :: यूनिट की तुलना में RSpec क्यों बेहतर है ?) पसंद करता हूं क्योंकि हमारे शब्द हमारी दुनिया बनाते हैं। तो अब, मैं एआरसी और कीवी कोड पूरा होने / स्वत: पूर्णता के साथ कीवी का उपयोग करता हूं । मैं देवदार के ऊपर कीवी को पसंद करता हूं क्योंकि यह OCUnit के ऊपर बनाया गया है और RSpec- शैली के मैचर्स और मोक्स / स्टब्स के साथ आता है। अद्यतन: मैं अब OCMock में देख रहा हूँ क्योंकि, वर्तमान में, कीवी टोल-फ्री ब्रिजेड ऑब्जेक्ट्स को ठोकर देने का समर्थन नहीं करता है

स्वीकृति परीक्षण के लिए, मैं यूआई स्वचालन का उपयोग करता हूं क्योंकि यह बहुत बढ़िया है। यह आपको प्रत्येक परीक्षण मामले को रिकॉर्ड करने देता है, जिससे लेखन परीक्षण स्वचालित हो जाता है। इसके अलावा, Apple इसे विकसित करता है, और इसलिए इसका एक आशाजनक भविष्य है। यह डिवाइस पर और इंस्ट्रूमेंट्स से भी काम करता है, जो मेमोरी लीक दिखाने जैसे अन्य शांत सुविधाओं के लिए अनुमति देता है। दुर्भाग्य से, यूआई स्वचालन के साथ, मुझे पता नहीं है कि ऑब्जेक्ट-सी कोड कैसे चलाया जाए, लेकिन फ्रैंक और आईक्यूक के साथ आप कर सकते हैं। इसलिए, मैं इकाई परीक्षणों के साथ निचले स्तर के ऑब्जेक्टिव-सी सामान का परीक्षण करूंगा या UIButtonकेवल TESTबिल्ड कॉन्फ़िगरेशन के लिए एस बनाऊंगा , जिस पर क्लिक करने पर, ऑब्जेक्टिव-सी कोड चलेगा।

आप किन समाधानों का उपयोग करते हैं?

संबंधित सवाल


1
मुझे कम से कम कुछ महीने पहले पता चला है कि पिवट लैब सीडर का उपयोग कर रहे थे। (उम मुझे लगता है कि स्पष्ट रूप से अपने github खाते पर दिया गया है)। एक दुकान से समर्थन के साथ, यह मेरी पसंद होगी।
जैड श्नाइडर

1
ये एक अच्छा बिंदु है। लेकिन तब फिर से, Apple अपने इकाई परीक्षण ढांचे का उपयोग करने का सुझाव देगा, न कि देवदार, नहीं? तो, फिर यह Pivotal बनाम। सेब। किसके साथ जाना है?
ma11hew28

2
मैं एक पोस्ट फ्रैंक, KIF और UIAutomation की तुलना कि इस सूत्र के पाठकों के लिए ब्याज की हो सकता है लिखा sgleadow.github.com/blog/2011/10/26/...
स्टू

जवाबों:


53

tl; डॉ

Pivotal में हमने देवदार लिखा क्योंकि हम अपनी रूबी परियोजनाओं पर Rspec का उपयोग और प्यार करते हैं। देवदार OCUnit के साथ बदलने या प्रतिस्पर्धा करने के लिए नहीं है; यह उद्देश्य सी के लिए BDD- शैली परीक्षण की संभावना लाने के लिए है, जैसे कि Rspec ने रूबी में BDD- शैली परीक्षण का बीड़ा उठाया है, लेकिन टेस्ट :: यूनिट को समाप्त नहीं किया है। एक या दूसरे को चुनना काफी हद तक शैली वरीयताओं का विषय है।

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

लंबा जवाब

देवदार और OCUnit जैसे दो परीक्षण ढाँचों के बीच निर्णय लेना (उदाहरण के लिए) दो चीजों के लिए नीचे आता है: पसंदीदा शैली, और उपयोग में आसानी। मैं शैली से शुरू करूँगा, क्योंकि यह केवल राय और पसंद की बात है; उपयोग में आसानी से ट्रेडऑफ़ का एक सेट हो जाता है।

शैली के विचार आप किस तकनीक या भाषा का उपयोग करते हैं। XUnit- शैली इकाई परीक्षण बीडीडी-शैली परीक्षण की तुलना में लंबे समय तक रहा है, लेकिन बाद में लोकप्रियता में तेजी से वृद्धि हुई है, मोटे तौर पर Rspec के कारण।

XUnit- शैली परीक्षण का प्राथमिक लाभ इसकी सादगी है, और व्यापक रूप से अपनाने (डेवलपर्स के बीच जो इकाई परीक्षण लिखते हैं); लगभग किसी भी भाषा में आप कोड लिखने पर विचार कर सकते हैं जिसमें एक xUnit- शैली ढांचा उपलब्ध है।

BDD- शैली के ढांचे में दो मुख्य अंतर होते हैं जब xUnit- शैली की तुलना में: आप परीक्षण (या ऐनक) की संरचना कैसे करते हैं, और अपने अभिकथन लिखने के लिए वाक्य रचना। मेरे लिए, संरचनात्मक अंतर मुख्य अंतर है। xUnit परीक्षण एक आयामी हैं, एक दिए गए परीक्षण वर्ग में सभी परीक्षणों के लिए एक सेटअप विधि है। हालांकि, हम जिन कक्षाओं का परीक्षण करते हैं, वे एक आयामी नहीं हैं; हमें अक्सर कई अलग-अलग, संभावित रूप से परस्पर विरोधी, संदर्भों में कार्यों का परीक्षण करने की आवश्यकता होती है। उदाहरण के लिए, एक AddItem: विधि के साथ एक साधारण शॉपिंग कार्ट क्लास पर विचार करें, (इस उत्तर के प्रयोजनों के लिए मैं ऑब्जेक्टिव C वाक्यविन्यास का उपयोग करूँगा)। इस पद्धति का व्यवहार भिन्न हो सकता है जब कार्ट में अन्य वस्तुओं की तुलना में कार्ट खाली हो; यह भिन्न हो सकता है यदि उपयोगकर्ता ने छूट कोड दर्ज किया है; यदि निर्दिष्ट आइटम ' टी चयनित शिपिंग विधि द्वारा भेज दिया जाएगा; आदि के रूप में इन संभावित स्थितियों को एक दूसरे के साथ अन्तर्विभाजित करते हैं जो आप संभावित संदर्भों की ज्यामितीय रूप से बढ़ती संख्या के साथ समाप्त होते हैं; xUnit- शैली के परीक्षण में यह अक्सर कई तरीकों की ओर जाता है, जैसे testAddItemWhenCartIsEmptyAndNoDiscountCodeAndShippingMethodApplies। बीडीडी-शैली के ढांचे की संरचना आपको इन स्थितियों को व्यक्तिगत रूप से व्यवस्थित करने की अनुमति देती है, जो मुझे लगता है कि यह सुनिश्चित करना आसान बनाता है कि मैं सभी मामलों को कवर करता हूं, साथ ही व्यक्तिगत स्थितियों को खोजने, बदलने या जोड़ने के लिए आसान है। एक उदाहरण के रूप में, देवदार सिंटैक्स का उपयोग करके, ऊपर की विधि इस तरह दिखाई देगी: xUnit- शैली के परीक्षण में यह अक्सर कई तरीकों की ओर जाता है, जैसे testAddItemWhenCartIsEmptyAndNoDiscountCodeAndShippingMethodApplies। बीडीडी-शैली के ढांचे की संरचना आपको इन स्थितियों को व्यक्तिगत रूप से व्यवस्थित करने की अनुमति देती है, जो मुझे लगता है कि यह सुनिश्चित करना आसान बनाता है कि मैं सभी मामलों को कवर करता हूं, साथ ही व्यक्तिगत स्थितियों को खोजने, बदलने या जोड़ने के लिए आसान है। एक उदाहरण के रूप में, देवदार सिंटैक्स का उपयोग करके, ऊपर की विधि इस तरह दिखाई देगी: xUnit- शैली के परीक्षण में यह अक्सर कई तरीकों की ओर जाता है, जैसे testAddItemWhenCartIsEmptyAndNoDiscountCodeAndShippingMethodApplies। बीडीडी-शैली के ढांचे की संरचना आपको इन स्थितियों को व्यक्तिगत रूप से व्यवस्थित करने की अनुमति देती है, जो मुझे लगता है कि यह सुनिश्चित करना आसान बनाता है कि मैं सभी मामलों को कवर करता हूं, साथ ही व्यक्तिगत स्थितियों को खोजने, बदलने या जोड़ने के लिए आसान है। एक उदाहरण के रूप में, देवदार सिंटैक्स का उपयोग करके, ऊपर की विधि इस तरह दिखाई देगी:

describe(@"ShoppingCart", ^{
    describe(@"addItem:", ^{
        describe(@"when the cart is empty", ^{
            describe(@"with no discount code", ^{
                describe(@"when the shipping method applies to the item", ^{
                    it(@"should add the item to the cart", ^{
                        ...
                    });

                    it(@"should add the full price of the item to the overall price", ^{
                        ...
                    });
                });

                describe(@"when the shipping method does not apply to the item", ^{
                    ...
                });
            });

            describe(@"with a discount code", ^{
                ...
            });
        });

        describe(@"when the cart contains other items, ^{
            ...
        });
    });
});

कुछ मामलों में आप पाएंगे कि इसमें संदर्भों के समान सेट हैं, जिन्हें आप साझा उदाहरण संदर्भों का उपयोग करके देख सकते हैं।

BDD- शैली के ढांचे और xUnit- शैली के ढांचे के बीच दूसरा मुख्य अंतर, अभिकथन (या "माचिस") सिंटैक्स, बस ऐनक की शैली को कुछ हद तक अच्छा बनाता है; कुछ लोग वास्तव में इसे पसंद करते हैं, दूसरों को नहीं।

यह उपयोग में आसानी के सवाल की ओर जाता है। इस मामले में, प्रत्येक ढांचे के पास अपने पेशेवरों और विपक्ष हैं:

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

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

    • हम डिबगर का उपयोग करने में सक्षम होना चाहते थे। आप देवदार के चश्मे को वैसे ही चलाते हैं जैसे आप किसी अन्य निष्पादन योग्य को चलाते हैं, इसलिए आप डिबगर का उसी तरह उपयोग कर सकते हैं।
    • हम परीक्षण में आसान कंसोल लॉगिंग चाहते थे। आप NSLog () OCUnit परीक्षणों में उपयोग कर सकते हैं, लेकिन आउटपुट बिल्ड विंडो में जाता है जहां आपको इसे पढ़ने के लिए बिल्ड स्टेप को अनफॉलो करना होगा।
    • हम कमांड लाइन और Xcode दोनों पर टेस्ट रिपोर्टिंग को पढ़ना आसान चाहते थे। OCUnit परिणाम Xcode में बिल्ड विंडो में अच्छी तरह से दिखाई देते हैं, लेकिन कमांड लाइन (या एक CI प्रक्रिया के भाग के रूप में) के निर्माण से परीक्षण आउटपुट में बहुत सारे और अन्य बिल्ड आउटपुट के साथ परस्पर क्रिया होती है। अलग-अलग बिल्ड और रन चरणों के साथ देवदार आउटपुट को अलग करता है इसलिए परीक्षण आउटपुट को खोजना आसान है। डिफ़ॉल्ट सीडर परीक्षण धावक मुद्रण की मानक शैली को कॉपी करता है "।" प्रत्येक गुजरती कल्पना के लिए, "एफ" विफल चश्मा आदि के लिए, देवदार में कस्टम रिपोर्टर ऑब्जेक्ट्स का उपयोग करने की क्षमता भी है, इसलिए आप इसे थोड़े प्रयास के साथ किसी भी तरह से आउटपुट परिणाम दे सकते हैं।
  • OCUnit उद्देश्य C के लिए आधिकारिक इकाई परीक्षण रूपरेखा है, और इसे Apple द्वारा समर्थित किया गया है। Apple के पास मूल रूप से असीम संसाधन हैं, इसलिए यदि वे चाहते हैं कि कुछ किया जाए तो वह पूरा हो जाएगा। और, आखिरकार, यह ऐप्पल का सैंडबॉक्स है जिसमें हम खेल रहे हैं। उस सिक्के का फ्लिप पक्ष, हालांकि, यह है कि एप्पल प्रत्येक दिन एक बिलियन समर्थन अनुरोधों और बग रिपोर्ट के आदेश पर प्राप्त करता है। वे उन सभी को संभालने के बारे में उल्लेखनीय रूप से अच्छे हैं, लेकिन वे उन मुद्दों को संभालने में सक्षम नहीं हो सकते हैं जो आप तुरंत रिपोर्ट करते हैं, या बिल्कुल भी नहीं। देवदार OCUnit की तुलना में बहुत नया और कम बेक किया हुआ है, लेकिन यदि आपके पास कोई प्रश्न या समस्या है या सुझाव है तो आप देवदार मेलिंग सूची (cedar-discuss@googlegroups.com) को संदेश भेजें और हम वही करेंगे जो हम आपकी मदद कर सकते हैं। इसके अलावा, Github (github.com/pivotal/cedar) से कोड कांटा करने के लिए स्वतंत्र महसूस करें और जो भी आपको लगता है वह गायब है।

  • IOS उपकरणों पर OCUnit परीक्षण चलाना मुश्किल हो सकता है। ईमानदारी से, मैंने इसे कुछ समय के लिए आज़माया नहीं है, इसलिए यह आसान हो सकता है, लेकिन पिछली बार मैंने कोशिश की कि मैं काम करने के लिए किसी भी UIKit कार्यक्षमता के लिए OCUnit परीक्षण प्राप्त नहीं कर सका। जब हमने देवदार लिखा तो हमने यह सुनिश्चित किया कि हम सिम्युलेटर और उपकरणों पर दोनों UIKit पर निर्भर कोड का परीक्षण कर सकते हैं।

अंत में, हमने इकाई परीक्षण के लिए देवदार लिखा, जिसका अर्थ है कि यह वास्तव में UISpec जैसी परियोजनाओं के साथ तुलनीय नहीं है। जब से मैंने UISpec का उपयोग करने की कोशिश की है, तब तक यह काफी समय हो गया है, लेकिन मैंने इसे मुख्य रूप से प्रोग्राम को iOS डिवाइस पर यूआई ड्राइविंग पर ध्यान केंद्रित करने के लिए समझा। हमने विशेष रूप से फैसला किया है कि सीडर को इस प्रकार के चश्मे का समर्थन करने की कोशिश न करें, क्योंकि ऐप्पल उस समय (यूआईए) ने यूआईओएमीकरण की घोषणा करने के बारे में था।


पूरी प्रतिक्रिया के लिए धन्यवाद। मैं RSpec पुस्तक पढ़ने जा रहा हूं और सीडर की कोशिश करूंगा। मैं UISpec को सेलेनियम अनुभाग में ले गया और वहां भी UIAutomation को जोड़ा। मैं UIAutomation के बारे में आपके ब्लॉग पोस्ट को पढ़ रहा हूं। फ्रैंक वास्तव में बहुत सरल और अधिक पठनीय, और बेहतर दस्तावेज के साथ दिखता है, इसलिए मैं इसके साथ शुरू करने के बारे में सोच रहा हूं। मुझे उम्मीद है कि यह यूआईओटोमेशन जितना शक्तिशाली होगा। आप कहते हैं कि यूआईयूटोमेशन जीवनचक्र के मुद्दों का परीक्षण कर सकता है। मुझे आश्चर्य है कि अगर iCuke भी कर सकता है ...
14:11 पर ma11hew28

8

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


5

परीक्षण संचालित विकास के लिए, मुझे GHUnit का उपयोग करना पसंद है , इसकी स्थापना के लिए एक हवा है, और डिबगिंग के लिए भी महान काम करता है।


धन्यवाद। मैंने उस एक को देखा लेकिन उसका उल्लेख करना भूल गया।
ma11hew28

GHUnit के लिए PLus 1। OCMock के साथ इसका उपयोग किया। यह सेटअप करने, विस्तार करने और बहुत मज़बूती से काम करने के लिए एक हवा है।
drekka

4

महान सूची!

मुझे UI परीक्षण iOS अनुप्रयोगों के लिए एक और दिलचस्प समाधान मिला।

तोरी ढाँचा

यह पर आधारित है UIAutomation। फ्रेमवर्क आपको ककड़ी में शैली की तरह स्क्रीन केंद्रित परिदृश्य लिखने देता है। परिदृश्यों को सिमुलेटर और डिवाइस पर कंसोल से निष्पादित किया जा सकता है (यह CI अनुकूल है)।

दावे स्क्रीनशॉट आधारित हैं। अनम्य लगता है, लेकिन यह आपको अच्छी HTML रिपोर्ट मिलती है, हाइलाइट की गई स्क्रीन तुलना के साथ और आप ऐसे मुखौटे प्रदान कर सकते हैं जो उन क्षेत्रों को परिभाषित करते हैं जिन्हें आप पिक्सेल सटीक अभिकथन करना चाहते हैं।

प्रत्येक स्क्रीन में वर्णित किया जाना चाहिए CoffeScriptऔर यह उपकरण जो स्वयं को रूबी में लिखा गया है। यह एक प्रकार का पॉलीग्लॉट दुःस्वप्न है, लेकिन उपकरण के लिए एक अच्छा अमूर्तता प्रदान करता है UIAutomationऔर जब स्क्रीन का वर्णन किया जाता है तो यह QA व्यक्ति के लिए भी प्रबंधनीय होता है।


तंग! धन्यवाद। मैंने इसे ऊपर दिए गए प्रश्न में जोड़ दिया।
ma11hew28

2

मैं इकाई परीक्षणों के लिए स्वीकृति परीक्षणों और देवदार के लिए iCuke चुनूंगा। UIAutomation Apple के लिए सही दिशा में एक कदम है, लेकिन निरंतर एकीकरण के लिए उपकरणों को बेहतर समर्थन की आवश्यकता है; स्वचालित रूप से इंस्ट्रूमेंट्स के साथ यूआईयूटोमेशन परीक्षण चलाना वर्तमान में संभव नहीं है, उदाहरण के लिए।


1

GHUnit इकाई परीक्षणों के लिए अच्छा है; एकीकरण परीक्षणों के लिए, मैंने कुछ सफलता के साथ UISpec का उपयोग किया है (यहाँ github कांटा: https://github.com/drync/UISpec ), लेकिन iCuke की कोशिश करने के लिए उत्सुक हूं, क्योंकि यह एक हल्का सेटअप होने का वादा करता है, और आप कर सकते हैं RSpec और ककड़ी की तरह रेलिंग अच्छाई का उपयोग करें।



0

मैं OCDSpec2 को वास्तव में पसंद करता हूं लेकिन मैं पक्षपाती हूं, मैंने OCDSpec लिखा और दूसरे में योगदान दिया।

यह आईओएस पर भी बहुत तेज है, भाग में क्योंकि यह OCUnit के शीर्ष पर रखे जाने के बजाय जमीन से बनाया गया है। इसमें RSpec / जैस्मीन सिंटैक्स भी है।

https://github.com/ericmeyer/ocdspec2

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.