หน่วยทดสอบสำหรับ csv parser


14

ฉันควรใช้การทดสอบใดในการทดสอบตัวแยกวิเคราะห์ csv

ฉันมีตัวแยกวิเคราะห์ csv อย่างง่ายใน C # และฉันต้องการให้แน่ใจว่าฉันมีการทดสอบหน่วยครอบคลุมทุกกรณีขอบ (และผิดปกติ) ทั่วไป ฉันควรใช้การทดสอบประเภทใดเพื่อระบุปัญหาที่อาจเกิดขึ้นและคดีเขตแดน


5
คุณได้ตรวจสอบcreatedata.comสำหรับการสร้างไฟล์ทดสอบที่แตกต่างกันหรือไม่?
Aaron McIver

@Aaron - การทดสอบที่ดีสามารถทำซ้ำได้และดังนั้นอย่าใช้ข้อมูลที่แตกต่างกัน แต่บางทีฉันอาจใช้พวกมันสำหรับคนรุ่นเดียวที่ฉันบันทึกไว้สำหรับชุดทดสอบ แต่ถึงตอนนั้นฉันต้องการตรวจสอบให้แน่ใจว่าฉันได้ครอบคลุมเคสที่แตกต่างกันทั้งหมดซึ่งสุ่มไม่รับประกันว่าจะทำ
Joel Coehoorn

Coehorn ผลการทดสอบที่ดีสามารถทำซ้ำได้ ฉันขอยืนยันว่าการใช้ข้อมูลที่แตกต่างกันนั้นดีตราบใดที่ผลลัพธ์ที่ต้องการยังคงไม่เปลี่ยนแปลง หากคุณต้องการให้แน่ใจว่าคุณได้ครอบคลุมกรณีต่าง ๆ ทั้งหมด (ขึ้นอยู่กับความคิดเห็นของคุณคุณจะแน่ใจว่าสิ่งเหล่านั้นคืออะไร) ทำไมไม่เริ่มเขียนการทดสอบ? คุณจะใช้เวลามากขึ้นในการหาคำตอบที่วิเศษแล้วเพียงแค่เขียนข้อสอบ
Aaron McIver

ผู้เขียนกำลังมองหากรณีทดสอบไม่ใช่ข้อมูลทดสอบ ฉันหวังว่าฉันจะรู้ว่าจะหาการทดสอบสาธารณะสำหรับสิ่งต่าง ๆ เช่นกัน
มหัศจรรย์

คำตอบ:


6

ฉันเพิ่งพบhttps://github.com/maxogden/csv-spectrum :

กลุ่มของไฟล์ CSV ที่แตกต่างกันเพื่อใช้เป็นทดสอบกรดสำหรับห้องสมุดการแยกวิเคราะห์ CSV นอกจากนี้ยังมีไฟล์ CSV เวอร์ชัน JSON สำหรับการตรวจสอบ

เป้าหมายของพื้นที่เก็บข้อมูลนี้คือการจับกรณีทดสอบเพื่อเป็นตัวแทนของสเปกตรัม CSV ทั้งหมด


ที่น่าสนใจที่ GitHub ของ parser CSV ของตัวเองล้มเหลวในการทดสอบเมื่อพยายามที่จะแสดง CSVs ทดสอบ ( github.com/maxogden/csv-spectrum/blob/master/csvs/... )
เอียนบอยด์

16

ต่อไปนี้เป็นกรณีเขตแดนไม่กี่แห่งที่คุณควรคิดและทำกรณีทดสอบ

  1. ฟิลด์พื้นฐาน ,foo,
  2. ฟิลด์ที่ยกมาขั้นพื้นฐาน ,"foo",
  3. เขตข้อมูลที่เสนอพร้อมกับขึ้นบรรทัดใหม่ ,"foo\nbar"
  4. เขตข้อมูลที่เสนอพร้อมด้วยเครื่องหมายจุลภาค ,"foo,bar"
  5. เขตข้อมูลที่ยกมาพร้อมกับใบเสนอราคาแบบฝัง ,"foo""bar"
  6. คุณแยกแยะระหว่างสตริงว่างและโมฆะหรือไม่? ถ้าคุณทำแล้ว,,ควรเป็นโมฆะและ,"",ควรให้สตริงว่าง
  7. คุณพยายามตรวจจับชนิดข้อมูลและทำสิ่งที่ถูกต้องหรือไม่? CSV มักใช้สำหรับข้อมูลตัวเลข เพิ่มการทดสอบใด ๆ ที่คุณคิดว่าเหมาะสมกับสิ่งนั้น
  8. หากคุณเขียนข้อมูลคุณควรครอบคลุมทุกกรณีข้างต้น
  9. คุณทำอะไรกับบรรทัดที่มีจำนวนฟิลด์ต่างกัน (ทดสอบเลย)
  10. คุณจะทำอย่างไรกับบรรทัดว่างต่อท้าย? (ทดสอบเลย)
  11. ประสิทธิภาพของไฟล์ขนาดใหญ่เป็นอย่างไร? (ทดสอบมันฉันเห็นตัวแยกวิเคราะห์ CSV หลายตัวที่ใช้สตริงไม่ได้ผลและใช้เวลากำลังสองซึ่งนำไปสู่สิ่งที่เรียบง่ายกลายเป็นเรื่องเจ็บปวดอย่างช้าๆ)

10

ไม่มีข้อกำหนดอย่างเป็นทางการสำหรับไฟล์ CSV อย่างไรก็ตามลองดูที่RFC 4180 - รูปแบบทั่วไปและประเภท MIME สำหรับไฟล์ CSV (โดยเฉพาะส่วนที่ 2) ซึ่งเป็นเอกสารรูปแบบที่ดูเหมือนว่าจะตามมาด้วยการใช้งานส่วนใหญ่

ดูเหมือนว่าค่อนข้างตรงไปตรงมาที่จะเริ่มสร้างกรณีทดสอบจากรายการในส่วนที่ 2 โดยเฉพาะ:

  1. แต่ละระเบียนจะอยู่ในบรรทัดที่แยกต่างหากคั่นด้วยตัวแบ่งบรรทัด (CRLF) ตัวอย่างเช่น:

    aaa, bbb, ccc CRLF zzz, yyy, xxx CRLF

  2. ระเบียนสุดท้ายในไฟล์อาจมีหรือไม่มีตัวแบ่งบรรทัดสิ้นสุด ตัวอย่างเช่น:

    aaa, bbb, ccc CZF zzz, yyy, xxx

  3. อาจมีบรรทัดส่วนหัวเสริมปรากฏเป็นบรรทัดแรกของไฟล์ที่มีรูปแบบเดียวกันกับบรรทัดบันทึกปกติ ส่วนหัวนี้จะมีชื่อที่สอดคล้องกับเขตข้อมูลในไฟล์และควรมีจำนวนเขตข้อมูลเดียวกันกับระเบียนในส่วนที่เหลือของไฟล์ (การมีหรือไม่มีบรรทัดส่วนหัวควรระบุผ่านพารามิเตอร์ "header" ของตัวเลือกนี้ ประเภท MIME) ตัวอย่างเช่น:

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

  4. ภายในส่วนหัวและแต่ละระเบียนอาจมีหนึ่งหรือมากกว่าหนึ่งฟิลด์คั่นด้วยเครื่องหมายจุลภาค แต่ละบรรทัดควรมีจำนวนฟิลด์เท่ากันตลอดทั้งไฟล์ ช่องว่างถือเป็นส่วนหนึ่งของเขตข้อมูลและไม่ควรละเว้น ฟิลด์สุดท้ายในระเบียนต้องไม่ตามด้วยเครื่องหมายจุลภาค ตัวอย่างเช่น:

    AAA, BBB, CCC

  5. แต่ละเขตข้อมูลอาจมีหรือไม่มีอยู่ในเครื่องหมายคำพูดคู่ (แต่บางโปรแกรมเช่น Microsoft Excel จะไม่ใช้เครื่องหมายคำพูดคู่เลย) หากเขตข้อมูลไม่ได้อยู่ในเครื่องหมายคำพูดคู่การอ้างอิงสองครั้งอาจไม่ปรากฏในเขตข้อมูล ตัวอย่างเช่น:

    "aaa", "bbb", "ccc" CRLF zzz, yyy, xxx

  6. ฟิลด์ที่มีตัวแบ่งบรรทัด (CRLF) เครื่องหมายคำพูดคู่และเครื่องหมายจุลภาคควรอยู่ในเครื่องหมายคำพูดคู่ ตัวอย่างเช่น:

    "aaa", "b CRLF bb", "ccc" CzzF zzz, yyy, xxx

  7. หากมีการใช้เครื่องหมายอัญประกาศคู่เพื่อใส่เขตข้อมูลดังนั้นเครื่องหมายอัญประกาศคู่ที่ปรากฏภายในเขตข้อมูลจะต้องถูกหลีกเลี่ยงโดยนำหน้าด้วยเครื่องหมายคำพูดคู่อื่น ตัวอย่างเช่น:

    "AAA", "B" "บีบี", "CCC"


8

ข้อมูลการสำรวจสำมะโนประชากรของสหรัฐมีให้ใน CSV

ฉันทำงานกับมันมาระยะหนึ่งแล้ว แน่นอนว่ามันแปลกมากที่จะทำการทดสอบที่ดีและมีตันและตัน


คุณจะอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่มันทำและทำไมคุณถึงแนะนำว่าเป็นการตอบคำถามที่ถาม "เชื่อมโยงเท่านั้นคำตอบ"ไม่ได้ค่อนข้างต้อนรับที่กองแลกเปลี่ยน
ริ้น

4

ตรวจสอบไดเรกทอรีนี้และดูรหัสในไฟล์ * .t:

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

(หมายเลขเวอร์ชัน -1.32 อาจเปลี่ยนไปในที่สุดดังนั้นลิงก์อาจกลายเป็น "ตาย" เพิ่มหมายเลขรุ่นด้วยตัวคุณเองโดยการลองผิดลองถูกหรือไปที่ไดเรกทอรีหลักหรือคลิกที่นี่

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

และคลิกผ่านทาง "เรียกดู" เพื่อซอร์สโค้ดของรุ่นใหม่ล่าสุด)

ข้อความ :: CSV_XS เป็นโมดูล perl สำหรับการแยกวิเคราะห์ไฟล์ csv ไฟล์ * .t เขียนด้วยภาษา Perl 5 ซึ่งประกอบด้วยไฟล์ทดสอบจำนวนมากสำหรับการทดสอบโมดูลด้วยตนเองโดยจะต้องดำเนินการในเวลาติดตั้งโมดูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.