csv ayrıştırıcı için birim testleri


14

Bir csv ayrıştırıcısını birim test etmek için hangi testleri kullanmalıyım?

C # basit bir csv ayrıştırıcı var ve ben tüm ortak (ve nadir) kenar durumlarda iyi birim testi kapsama sahip olduğundan emin olmak istiyorum. Olası sorunları ve sınır vakalarını tanımlamak için hangi testleri kullanmalıyım?


5
Değişken test dosyaları oluşturmak için createdata.com'u kontrol ettiniz mi?
Aaron McIver

@Aaron - iyi testler tekrarlanabilir ve bu nedenle değişen veriler kullanmayın. Ama belki de bunları bir test paketi için sakladığım bir kerelik bir nesil için kullanabilirim. Ama o zaman bile, rasgele yapılması garanti edilmeyen tüm farklı kenar durumlarını kapsadığımdan emin olmak istiyorum.
Joel Coehoorn

Coehorn İyi test sonuçları tekrarlanabilir. İstenen sonuç sabit kaldığı sürece değişen verilerin kullanılmasının iyi olduğunu iddia ediyorum. Tüm farklı uç durumlarını kapsadığınızdan emin olmak istiyorsanız (yorumlarınıza dayanarak bunların ne olduğundan emin olursunuz) neden testleri yazmaya başlamıyorsunuz? Testleri yazdıktan sonra büyülü bir çözüm aramak için daha fazla zaman harcayacaksınız.
Aaron McIver

Yazar test verilerini değil test senaryolarını arıyor. Keşke çeşitli şeyler için nerede genel testler bulabileceğimi bilseydim.
ProdigySim

Yanıtlar:


6

Ben sadece https://github.com/maxogden/csv-spectrum buldum :

CSV ayrıştırma kütüphaneleri için bir asit testi görevi görecek farklı CSV dosyaları. Doğrulama amacıyla CSV'lerin JSON sürümleri de vardır.

Bu deponun amacı, tüm CSV spektrumunu temsil etmek için test senaryolarını yakalamaktır.


Test CSV'lerini göstermeye çalışırken GitHub'ın kendi csv ayrıştırıcısının testlerde başarısız olması ilginçtir ( github.com/maxogden/csv-spectrum/blob/master/csvs/… )
Ian Boyd

16

İşte düşünmeniz ve test etmeniz gereken birkaç sınır vakası.

  1. Temel alan. ,foo,
  2. Temel alıntı alanı. ,"foo",
  3. Yerleşik yeni satır içeren alıntı alanı. ,"foo\nbar"
  4. Yerleştirilmiş virgül ile belirtilen alan. ,"foo,bar"
  5. Gömülü teklif ile alıntı alanı. ,"foo""bar"
  6. Boş dizeleri ve boş karakterleri birbirinden ayırıyor musunuz? Bunu yaparsanız ,,, boş ,"",olmalı ve boş bir dize vermelisiniz.
  7. Veri türlerini tespit etmeye ve doğru olanı yapmaya çalışıyor musunuz? CSV genellikle sayısal veriler için kullanılır. Bunun için uygun olduğunu düşündüğünüz testleri ekleyin.
  8. Veri yazarsanız, yukarıdaki durumların tümünü kapsamalısınız.
  9. Farklı sayıda alana sahip çizgilerle ne yaparsınız? (Dene.)
  10. Sondaki boş satırlarla ne yaparsınız? (Dene.)
  11. Büyük bir dosyada performans nasıl? (Test edin. Dizeleri verimsiz kullanan çok fazla evde büyüyen CSV ayrıştırıcı gördüm ve sonuç olarak karesel zaman aldım, basit şeylerin acı verici şekilde yavaşlamasına yol açtı.)

10

CSV dosyaları için resmi bir şartname yoktur. Bununla birlikte, CSV dosyaları için yaygın uygulama ve MIME türlerine (özellikle Bölüm 2), çoğu uygulama tarafından izlenen formatı belgeleyen bir göz atın .

Bölüm 2'deki listeden bazı test senaryoları oluşturmaya başlamak oldukça basit görünmektedir, özellikle:

  1. Her kayıt, satır sonu (CRLF) ile ayrılmış ayrı bir satırda bulunur. Örneğin:

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

  2. Dosyadaki son kaydın bir bitiş sonu kesmesi olabilir veya olmayabilir. Örneğin:

    aaa, bbb, ccc CRLF zzz, yyy, xxx

  3. Dosyanın ilk satırında normal kayıt satırlarıyla aynı formatta görünen isteğe bağlı bir başlık satırı olabilir. Bu başlık, dosyadaki alanlara karşılık gelen adlar içerecek ve dosyanın geri kalanındaki kayıtlarla aynı sayıda alanı içermelidir (başlık satırının varlığı veya yokluğu, isteğe bağlı "başlık" parametresi ile belirtilmelidir. MIME türü). Örneğin:

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

  4. Başlık ve her kayıtta, virgülle ayrılmış bir veya daha fazla alan olabilir. Her satır, dosya boyunca aynı sayıda alanı içermelidir. Boşluklar bir alanın parçası olarak kabul edilir ve göz ardı edilmemelidir. Kayıttaki son alanı virgül izlememelidir. Örneğin:

    aaa, bbb ccc

  5. Her alan çift tırnak içine alınabilir veya alınmayabilir (ancak Microsoft Excel gibi bazı programlar çift tırnak kullanmaz). Alanlar çift tırnak içine alınmazsa, alanların içinde çift tırnak görünmeyebilir. Örneğin:

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

  6. Satır sonu (CRLF), çift tırnak ve virgül içeren alanlar çift tırnak içine alınmalıdır. Örneğin:

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

  7. Alanları kapatmak için çift tırnak işareti kullanılıyorsa, alanın içinde görünen çift tırnaktan önce başka bir çift tırnak işareti konarak kaçılmalıdır. Örneğin:

    "Aaa", "b", "bb", "ccc"



4

Bu dizini kontrol edin ve * .t dosyalarındaki koda bakın .:

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

(Sürüm numarası -1.32 sonunda değişebilir, böylece bağlantı "ölü" olabilir. Sürüm numarasını deneme yanılma yoluyla kendiniz artırın veya üst dizine gidin veya burayı tıklayın

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

ve en yeni sürümün kaynak koduna "Göz at" yoluyla tıklayın)

Metin :: CSV_XS, csv dosyalarını ayrıştırmak için olgun bir perl modülüdür. * .T dosyaları Perl 5'te yazılmıştır, modülün kendi kendini sınaması için birçok test senaryosu içerir, modül kurulum zamanında gerçekleştirilmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.