блок тестів для аналізатора CSV


14

Які тести потрібно використовувати для тестування аналізатора CSV?

У мене є простий синтаксичний аналізатор у C #, і я хочу бути впевненим, що у мене є хороше висвітлення тестових одиниць усіх поширених (і нечасто) крайових випадків. Які тести я повинен використовувати для виявлення потенційних проблем та межових випадків?


5
Ви перевірили generatedata.com на створення різних тестових файлів?
Аарон Маківер

@Aaron - хороші тести можна повторювати, тому не використовуйте різні дані. Але я, можливо, міг би їх використовувати для одноразового покоління, яке потім зберігаю для тестового набору. Але навіть тоді я хочу переконатися, що я охопив усі різні випадкові випадки, що випадково не гарантовано.
Joel Coehoorn

Coehorn Хороші результати тестів повторювані. Я заперечую, що використання даних, що змінюються, добре, якщо бажаний результат залишається постійним. Якщо ви хочете переконатися, що ви охопили всі різні випадки справи (на основі ваших коментарів вам здається, що це таке), чому б не почати писати тести? Ви витратите більше часу на пошуки магічного рішення, а потім просто на написання тестів.
Аарон Маківер

Автор шукає тестові випадки, а не тестові дані. Мені б хотілося, щоб я також знав, де знайти громадські тести на різні речі.
ProdigySim

Відповіді:


6

Щойно я знайшов https://github.com/maxogden/csv-spectrum :

Купа різних файлів CSV, які служать тестом на кислотність для розбору бібліотек CSV. Також є версії JSON CSV для перевірки.

Метою цього сховища є захоплення тестових випадків для представлення всього спектру CSV.


Цікаво, що власний аналізатор csv GitHub провалив тести, намагаючись показати тестові CSV ( github.com/maxogden/csv-spectrum/blob/master/csvs/… )
Ian Boyd

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 CRLF zzz, yyy, xxx

  3. Можливо, необов'язковий рядок заголовка з'являється як перший рядок файлу у тому ж форматі, що і звичайні рядки запису. Цей заголовок буде містити імена, що відповідають полям у файлі, і повинен містити таку ж кількість полів, що і записи в решті файлу (наявність або відсутність рядка заголовка має бути зазначено через необов'язковий параметр "заголовка" цього Тип 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" CRLF zzz, yyy, xxx

  7. Якщо для укладання полів використовуються подвійні лапки, то подвійну цитату, що з’являється всередині поля, необхідно уникнути, передуючи їй ще однією подвійною цитатою. Наприклад:

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


8

Дані перепису США доступні в CSV

Я над цим працював деякий час. Це, звичайно, досить дивно, щоб бути хорошим випробуванням, і це є тонни і тонни.


Ви не проти пояснити, що це робить, і чому ви рекомендуєте це відповісти на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на біржі стеків
gnat

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, вони містять безліч тестів для самостійного тестування модуля, вони повинні виконуватися під час встановлення модуля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.