unit test per un parser csv

14

Quali test dovrei usare per testare un'unità un parser csv?

Ho un semplice parser csv in C #, e voglio essere sicuro di avere una buona copertura del test unitario di tutti i comuni (e non comune) casi limite. Quali test dovrei usare per identificare potenziali problemi e casi limite?

    
posta Joel Coehoorn 04.04.2011 - 21:39
fonte

5 risposte

6

Ho appena trovato link :

A bunch of different CSV files to serve as an acid test for CSV parsing libraries. There are also JSON versions of the CSVs for verification purposes.

The goal of this repository is to capture test cases to represent the entire CSV spectrum.

    
risposta data 23.01.2014 - 19:27
fonte
16

Ecco alcuni casi limite per i quali dovresti aver pensato e avere casi di test.

  1. Campo base. %codice%
  2. Campo quotato di base. %codice%
  3. Campo quotato con nuova riga incorporata. %codice%
  4. Campo quotato con virgola incorporata. %codice%
  5. Campo quotato con citazione incorporata. %codice%
  6. Distingui tra stringhe vuote e null? Se lo fai allora ,foo, dovrebbe essere un null e ,"foo", dovrebbe dare una stringa vuota.
  7. Cerchi di rilevare tipi di dati e fare la cosa giusta? Il CSV viene spesso utilizzato per dati numerici. Aggiungi tutti i test che ritieni appropriati per questo.
  8. Se scrivi dati, dovresti coprire tutti i casi sopra indicati.
  9. Che cosa fai con linee con diversi numeri di campi? (Provalo.)
  10. Che cosa fai con le righe vuote finali? (Provalo.)
  11. Come sono le prestazioni su un file di grandi dimensioni? (Provalo. Ho visto troppi parser CSV nostrani che usano stringhe inefficienti e, di conseguenza, impiegano un tempo quadratico, portando a cose semplici che diventano dolorosamente lente.)
risposta data 05.04.2011 - 00:53
fonte
10

Non ci sono specifiche formali per i file CSV. Tuttavia, dai un'occhiata a RFC 4180 - Tipi di formato e MIME comuni per i file CSV , (in particolare la Sezione 2) che documenta il formato che sembra essere seguito dalla maggior parte delle implementazioni.

Sembra abbastanza semplice iniziare a generare alcuni casi di test dall'elenco nella sezione 2, in particolare:

  1. Each record is located on a separate line, delimited by a line break (CRLF). For example:

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

  2. The last record in the file may or may not have an ending line break. For example:

    aaa,bbb,ccc CRLF zzz,yyy,xxx

  3. There maybe an optional header line appearing as the first line of the file with the same format as normal record lines. This header will contain names corresponding to the fields in the file and should contain the same number of fields as the records in the rest of the file (the presence or absence of the header line should be indicated via the optional "header" parameter of this MIME type). For example:

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

  4. Within the header and each record, there may be one or more fields, separated by commas. Each line should contain the same number of fields throughout the file. Spaces are considered part of a field and should not be ignored. The last field in the record must not be followed by a comma. For example:

    aaa,bbb,ccc

  5. Each field may or may not be enclosed in double quotes (however some programs, such as Microsoft Excel, do not use double quotes at all). If fields are not enclosed with double quotes, then double quotes may not appear inside the fields. For example:

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

  6. Fields containing line breaks (CRLF), double quotes, and commas should be enclosed in double-quotes. For example:

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

  7. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote. For example:

    "aaa","b""bb","ccc"

    
risposta data 05.04.2011 - 02:03
fonte
8

I dati del censimento USA sono disponibili in CSV

Ci sto lavorando da un po '. È certamente abbastanza strano per essere un buon test, e ce ne sono tantissime.

    
risposta data 04.04.2011 - 21:54
fonte
4

Controlla questa directory e guarda il codice nei file * .t.:

link

(Il numero di versione -1.32 potrebbe eventualmente cambiare, quindi il collegamento potrebbe diventare "morto". Incrementare il numero di versione da soli per tentativi ed errori oppure andare alla directory superiore o fare clic qui

link

e fai clic su "Sfoglia" per il codice sorgente della versione più recente)

Testo :: CSV_XS è un modulo perl maturo per l'analisi dei file CSV. I file * .t sono scritti in Perl 5, contengono molti test per il test automatico del modulo, devono essere eseguiti al momento dell'installazione del modulo.

    
risposta data 22.09.2011 - 10:44
fonte

Leggi altre domande sui tag