csvパーサーの単体テスト


14

csvパーサーの単体テストに使用するテストは何ですか?

C#には単純なcsvパーサーがあり、すべての一般的な(および一般的ではない)エッジケースのユニットテストのカバレッジが良好であることを確認したいと思います。潜在的な問題と境界ケースを識別するために、どのテストを使用する必要がありますか?


5
さまざまなテストファイルの作成について、generatedata.comをチェックましたか?
アーロンマクアイバー

@Aaron-優れたテストは繰り返し可能であるため、さまざまなデータを使用しないでください。ただし、それらを1回限りの世代に使用して、テストスイート用に保存することもできます。しかし、それでも、すべての異なるエッジケースをカバーしたことを確認したいと思います。
ジョエルCoehoorn

Coehorn良いテスト結果は再現可能です。希望する結果が一定である限り、変化するデータを使用しても問題ないと思います。さまざまなエッジケースをすべてカバーしたことを確認したい場合(コメントに基づいて、それらが何であるかを確認します)、テストの作成を開始しませんか?魔法の解決策を探すのに時間を費やし、テストを書くだけです。
アーロンマクアイバー

著者は、テストデータではなくテストケースを探しています。さまざまなものの公開テストをどこで見つけることができるかを知りたい。
ProdigySim

回答:


6

https://github.com/maxogden/csv-spectrumを見つけました:

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

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


テストCSVを表示するようにしようとしたとき、その興味深いのは、GitHubの自身のCSVパーサーは、テストに失敗したこと(github.com/maxogden/csv-spectrum/blob/master/csvs/...
イアン・ボイド

16

以下に、考えてテストケースを用意しておくべき境界ケースをいくつか示します。

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

10

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」


8

米国国勢調査のデータはCSVで入手できます

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


それが何をするのか、そして尋ねられた質問に答えるのになぜそれをお勧めするのか、もっと説明してもらえますか?Stack Exchange では「リンクのみの回答」は歓迎されません
-gnat

4

このディレクトリをチェックアウトし、*。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で記述されており、モジュールを自己テストするための多くのテストケースが含まれており、モジュールのインストール時に実行されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.