csvパーサーの単体テストに使用するテストは何ですか?
C#には単純なcsvパーサーがあり、すべての一般的な(および一般的ではない)エッジケースのユニットテストのカバレッジが良好であることを確認したいと思います。潜在的な問題と境界ケースを識別するために、どのテストを使用する必要がありますか?
csvパーサーの単体テストに使用するテストは何ですか?
C#には単純なcsvパーサーがあり、すべての一般的な(および一般的ではない)エッジケースのユニットテストのカバレッジが良好であることを確認したいと思います。潜在的な問題と境界ケースを識別するために、どのテストを使用する必要がありますか?
回答:
https://github.com/maxogden/csv-spectrumを見つけました:
ライブラリを解析するCSVの酸テストとして機能するさまざまなCSVファイルの束。検証用のCSVのJSONバージョンもあります。
このリポジトリの目標は、テストケースをキャプチャしてCSVスペクトル全体を表すことです。
以下に、考えてテストケースを用意しておくべき境界ケースをいくつか示します。
,foo,
,"foo",
,"foo\nbar"
,"foo,bar"
,"foo""bar"
,,
、nullになり,"",
、空の文字列が返されます。CSVファイルの正式な仕様はありません。ただし、RFC 4180-CSVファイルの一般的な形式とMIMEタイプ(特にセクション2)をご覧ください。ほとんどの実装で採用されていると思われる形式が記載されています。
特にセクション2のリストからいくつかのテストケースの生成を開始することは、かなり簡単に思えます。
各レコードは、改行(CRLF)で区切られた個別の行に配置されます。例えば:
aaa、bbb、ccc CRLF zzz、yyy、xxx CRLF
ファイルの最後のレコードには、終了改行がある場合とない場合があります。例えば:
aaa、bbb、ccc CRLF zzz、yyy、xxx
ファイルの最初の行として、通常のレコード行と同じ形式のオプションのヘッダー行が表示される場合があります。このヘッダーには、ファイルのフィールドに対応する名前が含まれ、ファイルの残りのレコードと同じ数のフィールドが含まれている必要があります(ヘッダー行の有無は、このオプションの「header」パラメーターで示す必要がありますMIMEタイプ)。例えば:
field_name、field_name、field_name CRLF aaa、bbb、ccc CRLF zzz、yyy、xxx CRLF
ヘッダーと各レコード内には、コンマで区切られた1つ以上のフィールドがあります。各行には、ファイル全体で同じ数のフィールドが含まれている必要があります。スペースはフィールドの一部と見なされるため、無視しないでください。レコードの最後のフィールドにコンマを続けてはなりません。例えば:
aaa、bbb、ccc
各フィールドは二重引用符で囲まれている場合と囲まれていない場合があります(ただし、Microsoft Excelなどの一部のプログラムでは二重引用符をまったく使用しません)。フィールドが二重引用符で囲まれていない場合、フィールド内に二重引用符が表示されない場合があります。例えば:
「aaa」、「bbb」、「ccc」CRLF zzz、yyy、xxx
改行(CRLF)、二重引用符、およびコンマを含むフィールドは、二重引用符で囲む必要があります。例えば:
「aaa」、「b CRLF bb」、「ccc」CRLF zzz、yyy、xxx
二重引用符を使用してフィールドを囲む場合、フィールド内に表示される二重引用符は、その前に別の二重引用符を付けてエスケープする必要があります。例えば:
「aaa」、「b」、「bb」、「ccc」
私はしばらくの間、それに取り組んできました。それは確かに良いテストになるほど奇妙であり、それはたくさんあります。
このディレクトリをチェックアウトし、*。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で記述されており、モジュールを自己テストするための多くのテストケースが含まれており、モジュールのインストール時に実行されます。