एक सीएसवी पार्सर के लिए यूनिट परीक्षण


14

एक सीएसवी पार्सर का परीक्षण करने के लिए मुझे किन परीक्षणों का उपयोग करना चाहिए?

मेरे पास C # में एक सरल सीएसवी पार्सर है, और मैं यह सुनिश्चित करना चाहता हूं कि मेरे पास सभी सामान्य (और असामान्य) एज मामलों की अच्छी यूनिट टेस्ट कवरेज हो। संभावित समस्याओं और सीमा मामलों की पहचान करने के लिए मुझे किन परीक्षणों का उपयोग करना चाहिए?


5
आप की जाँच की है generatedata.com परीक्षण फ़ाइलों बदलती के निर्माण के लिए?
एरोन मैकिवर

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

Coehorn अच्छा परीक्षण के परिणाम दोहराने योग्य हैं। मेरा तर्क है कि वांछित भिन्न परिणाम स्थिर रहने तक डेटा का उपयोग करना ठीक है। यदि आप यह सुनिश्चित करना चाहते हैं कि आपने सभी अलग-अलग किनारे के मामलों को कवर किया है (आपकी टिप्पणियों के आधार पर आप निश्चित हैं कि वे क्या हैं) तो परीक्षणों को लिखना क्यों शुरू नहीं करें? आप एक जादुई समाधान की तलाश में अधिक समय बिताएंगे, फिर बस परीक्षण लिखेंगे।
एरोन मैकिवर

लेखक परीक्षण मामलों की तलाश कर रहा है, परीक्षण डेटा की नहीं। काश मुझे पता होता कि विभिन्न चीजों के लिए सार्वजनिक परीक्षण कहां से मिलेंगे।
प्रोडिग्सीम

जवाबों:


6

मैंने अभी-अभी https://github.com/maxogden/csv-spectrum पाया :

CSV पार्सिंग पुस्तकालयों के लिए एसिड परीक्षण के रूप में सेवा करने के लिए विभिन्न CSV फ़ाइलों का एक गुच्छा। सत्यापन उद्देश्यों के लिए CSV के JSON संस्करण भी हैं।

इस भंडार का लक्ष्य पूरे सीएसवी स्पेक्ट्रम का प्रतिनिधित्व करने के लिए परीक्षण मामलों को पकड़ना है।


यह दिलचस्प है कि GitHub का अपना CSV पार्सर परीक्षण CSVs ( github.com/maxogden/csv-spectrum/blob/master/csvs/… ) दिखाने की कोशिश में विफल रहता है
Boyd

16

यहाँ कुछ सीमाएँ हैं जिनके बारे में आपको सोचना चाहिए था और जिनके लिए परीक्षण मामले थे।

  1. मूल क्षेत्र। ,foo,
  2. बुनियादी उद्धृत क्षेत्र। ,"foo",
  3. एम्बेडेड newline के साथ उद्धृत क्षेत्र। ,"foo\nbar"
  4. एम्बेडेड अल्पविराम के साथ उद्धृत क्षेत्र। ,"foo,bar"
  5. एम्बेडेड उद्धरण के साथ उद्धृत क्षेत्र। ,"foo""bar"
  6. क्या आप खाली तार और नल के बीच अंतर करते हैं? यदि आप करते हैं तो ,,एक अशक्त ,"",होना चाहिए और एक खाली स्ट्रिंग देना चाहिए।
  7. क्या आप डेटा प्रकारों का पता लगाने और सही काम करने की कोशिश करते हैं? CSV अक्सर संख्यात्मक डेटा के लिए उपयोग किया जाता है। जो भी परीक्षण आपको उचित लगे, उसे उसमें जोड़ें।
  8. यदि आप डेटा लिखते हैं, तो आपको उपरोक्त सभी मामलों को कवर करना चाहिए।
  9. आप अलग-अलग संख्याओं वाले क्षेत्रों में लाइनों के साथ क्या करते हैं? (झसे आज़माओ।)
  10. रिक्त लाइनों को पीछे छोड़ते हुए आप क्या करते हैं? (झसे आज़माओ।)
  11. किसी बड़ी फ़ाइल पर प्रदर्शन कैसा है? (इसका परीक्षण करें। मैंने बहुत से होमग्रोन CSV पार्सर देखे हैं, जो अयोग्य तरीके से तारों का उपयोग करते हैं और परिणामस्वरूप द्विघात समय लेते हैं, जिससे साधारण सामान दर्द से धीमा हो जाता है।)

10

CSV फ़ाइलों के लिए कोई औपचारिक विनिर्देश नहीं है। हालाँकि, RFC 4180 - CSV फ़ाइलों के लिए सामान्य प्रारूप और MIME प्रकार , (विशेषकर धारा 2) पर एक नज़र डालें, जो उस प्रारूप का दस्तावेजीकरण करता है जो अधिकांश कार्यान्वयन के बाद लगता है।

विशेष रूप से धारा 2 में सूची से कुछ परीक्षण मामलों को उत्पन्न करना शुरू करना काफी सरल लगता है:

  1. प्रत्येक रिकॉर्ड एक अलग लाइन पर स्थित होता है, जिसे लाइन ब्रेक (CRLF) द्वारा सीमांकित किया जाता है। उदाहरण के लिए:

    आआआ, बीबीबी, सीसीसी सीआरएलएफ ज़ज़, य्यी, एक्सएक्सएक्स सीआरएलएफ

  2. फ़ाइल का अंतिम रिकॉर्ड एंडिंग लाइन ब्रेक हो सकता है या नहीं। उदाहरण के लिए:

    आआआ, बीबीबी, सीसीसी सीआरएलएफ ज़ज़, य्यी, xxx

  3. वहाँ शायद एक वैकल्पिक हेडर लाइन सामान्य रिकॉर्ड लाइनों के रूप में एक ही प्रारूप के साथ फ़ाइल की पहली पंक्ति के रूप में दिखाई दे रही है। इस हेडर में फ़ाइल के फ़ील्ड के नाम होंगे और इसमें बाकी फ़ील्ड में रिकॉर्ड के समान फ़ील्ड शामिल होने चाहिए (हेडर लाइन की मौजूदगी या अनुपस्थिति को इस के वैकल्पिक "हेडर" पैरामीटर के माध्यम से इंगित किया जाना चाहिए। माइम प्रकार)। उदाहरण के लिए:

    field_name, field_name, field_name CRLF आ, bbb, ccc CRLF zzz, yyy, xxx CRLF

  4. हेडर और प्रत्येक रिकॉर्ड के भीतर, एक या एक से अधिक फ़ील्ड हो सकते हैं, जिन्हें कॉमा द्वारा अलग किया जाता है। प्रत्येक पंक्ति में संपूर्ण फ़ाइल में समान फ़ील्ड होनी चाहिए। रिक्त स्थान को एक क्षेत्र का हिस्सा माना जाता है और इसे अनदेखा नहीं किया जाना चाहिए। रिकॉर्ड में अंतिम फ़ील्ड का अल्पविराम द्वारा पालन नहीं किया जाना चाहिए। उदाहरण के लिए:

    aaa, bbb, सीसीसी

  5. प्रत्येक क्षेत्र को दोहरे उद्धरण चिह्नों में संलग्न किया जा सकता है या नहीं भी किया जा सकता है (हालाँकि कुछ कार्यक्रम, जैसे कि Microsoft Excel, दोहरे उद्धरण चिह्नों का उपयोग नहीं करते हैं)। यदि फ़ील्ड दोहरे उद्धरणों से संलग्न नहीं हैं, तो फ़ील्ड के अंदर दोहरे उद्धरण प्रकट नहीं हो सकते हैं। उदाहरण के लिए:

    "आआ", "बीबीबी", "सीसीसी" सीआरएलएफ ज़ज़, य्यी, एक्सएक्सएक्स

  6. लाइन विराम (CRLF), दोहरे उद्धरण और अल्पविराम वाले फ़ील्ड को दोहरे उद्धरणों में संलग्न किया जाना चाहिए। उदाहरण के लिए:

    "आआ", "बी सीआरएलएफ बी बी", "सीसीसी" सीआरएलएफ ज़ज़, य्यी, एक्सएक्सएक्स

  7. यदि डबल-कोट्स का उपयोग खेतों को घेरने के लिए किया जाता है, तो किसी फ़ील्ड के अंदर दिखाई देने वाले दोहरे-उद्धरण को दूसरे दोहरे उद्धरण से पहले ही भाग जाने से बचना चाहिए। उदाहरण के लिए:

    "Aaa", "ख" "bb", "सीसीसी"


8

यूएस की जनगणना के आंकड़े सीएसवी में उपलब्ध हैं

मैं कुछ समय के लिए इस पर काम कर रहा हूं। यह निश्चित रूप से एक अच्छा परीक्षण होने के लिए काफी अजीब है, और इसमें टन और टन है।


क्या आप इस बारे में और अधिक व्याख्या करने का मन बना रहे हैं कि यह पूछे गए प्रश्न का उत्तर देने के लिए आपको क्या करने की सलाह देता है? स्टैक एक्सचेंज में "लिंक-ओनली जवाब" का बहुत स्वागत नहीं है
gnat

4

इस निर्देशिका को देखें और * .t फ़ाइलों में कोड देखें।

http://cpansearch.perl.org/src/MAKAMAKA/Text-CSV-1.32/t/

(संस्करण संख्या -1.32 अंततः बदल सकता है इसलिए लिंक "मृत" बन सकता है। परीक्षण संख्या और त्रुटि के आधार पर संस्करण संख्या बढ़ाएँ, या मूल निर्देशिका पर जाएँ या यहाँ क्लिक करें

https://metacpan.org/pod/Text::CSV

और "ब्राउज़ करें" के माध्यम से नवीनतम संस्करण के स्रोत कोड पर क्लिक करें)

पाठ :: CSV_XS सीएसवी फ़ाइलों को पार्स करने के लिए एक परिपक्व पर्ल मॉड्यूल है। * .T फाइलें पर्ल 5 में लिखी गई हैं, इनमें मॉड्यूल के स्व-परीक्षण के लिए बहुत सारे टेस्टकेस हैं, इन्हें मॉड्यूल इंस्टॉलेशन समय पर किया जाना है।

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