web-dev-qa-db-ja.com

csvパーサーの単体テスト

Csvパーサーの単体テストにはどのテストを使用すればよいですか?

C#に simple csv parser があり、すべての一般的な(一般的ではない)Edgeケースのユニットテストが適切にカバーされていることを確認します。潜在的な問題と境界ケースを特定するには、どのテストを使用すればよいですか?

14
Joel Coehoorn

私はちょうど見つけました https://github.com/maxogden/csv-spectrum

CSV解析ライブラリの酸テストとして機能するさまざまなCSVファイルの束。検証用のJSONバージョンのCSVもあります。

このリポジトリの目的は、CSVスペクトル全体を表すテストケースをキャプチャすることです。

6
Andreas Gohr

ここでは、検討してテストケースを用意する必要があるいくつかの境界ケースを示します。

  1. 基本フィールド。 ,foo,
  2. 基本的な引用フィールド。 ,"foo",
  3. 改行が埋め込まれた引用フィールド。 ,"foo\nbar"
  4. 埋め込まれたコンマを含む引用フィールド。 ,"foo,bar"
  5. 引用符が埋め込まれた引用フィールド。 ,"foo""bar"
  6. 空の文字列とnullを区別しますか?もしそうなら,,はnullである必要があり、,"",は空の文字列を与える必要があります。
  7. データ型を検出して正しいことをしようとしていますか? CSVは数値データによく使用されます。そのために適切と思われるテストを追加します。
  8. データを書き込む場合は、上記のすべてのケースをカバーする必要があります。
  9. フィールドの数が異なる行をどのように処理しますか? (試して。)
  10. 末尾の空白行をどうしますか? (試して。)
  11. 大きなファイルのパフォーマンスはどうですか? (テストしてみてください。文字列を非効率的に使用し、その結果、2次時間がかかり、単純なものがひどく遅くなる原因となる、自社で作成したCSVパーサーが多すぎます。)
16
btilly

CSVファイルの正式な仕様はありません。ただし、ほとんどの実装が従うと思われる形式を文書化した RFC 4180-CSVファイルの一般的な形式とMIMEタイプ (特にセクション2)をご覧ください。

特に、セクション2のリストからいくつかのテストケースの生成を開始するのはかなり簡単です。

  1. 各レコードは、改行(CRLF)で区切られた別々の行にあります。例えば:

    aaa、bbb、ccc CRLF zzz、yyy、xxx CRLF

  2. ファイルの最後のレコードには、終了の改行がある場合とない場合があります。例えば:

    aaa、bbb、ccc CRLF zzz、yyy、xxx

  3. 通常のレコード行と同じ形式のファイルの最初の行として現れるオプションのヘッダー行があるかもしれません。このヘッダーには、ファイル内のフィールドに対応する名前が含まれ、ファイルの残りのレコードと同じ数のフィールドが含まれている必要があります(ヘッダー行の有無は、このオプションの「header」パラメーターで示す必要がありますMIMEタイプ)。例えば:

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

  4. ヘッダーと各レコード内には、カンマで区切られた1つ以上のフィールドがあります。各行には、ファイル全体で同じ数のフィールドが含まれている必要があります。スペースはフィールドの一部と見なされるため、無視しないでください。レコードの最後のフィールドの後にコンマを続けてはなりません。例えば:

    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」

10
Paddyslacker

米国の国勢調査データはCSVで利用可能

私はしばらくそれに取り組んでいます。それは確かに良いテストになるには奇妙なことであり、それはたくさんあります。

8
Satanicpuppy

このディレクトリを確認し、*。tファイルのコードを確認してください。

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

(バージョン番号-1.32は最終的に変更される可能性があるため、リンクが「デッド」になる可能性があります。試行錯誤してバージョン番号を自分で増やすか、親ディレクトリに移動するか、ここをクリックしてください

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

「参照」をクリックして最新バージョンのソースコードに移動します)

Text :: CSV_XSは、csvファイルを解析するための成熟したPerlモジュールです。 * .tファイルはPerl 5で記述されており、モジュールのセルフテスト用の多くのテストケースが含まれています。これらは、モジュールのインストール時に実行されます。

4
knb