いくつかのファイル形式のプロジェクトに取り組んでいます。一部の形式は.xsdsで指定されており、他の形式はそれぞれのWebサイトのドキュメントで指定されています。一部は、ドキュメントのないカスタムの社内形式です。ムワハハハハ。
問題は何ですか?
ファイルリーダーをテストしたいのですが、これを行う方法が完全にわかりません。アプリケーションの流れは次のとおりです。
file.___ ===> read by FileReader.Java ===> which creates a Model object
FileReader
インターフェースは
public interface FileReader {
public Model read(String filename);
}
Model
には、ファイルの読み取り時に入力されるいくつかの属性があります。それは次のようになります
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
何を試しましたか?
私の唯一のアイデアは、ファイル形式ごとにファイル「ジェネレータ」を作成することでした。これらのジェネレーターは基本的にいくつかの変数(たとえば、ファイルに生成するコメントの数)を取り、サンプルファイルを出力するビルダーであり、それを読み込んで、結果のModel
を以前使用した変数と比較します最初にファイルを生成します。
ただし、これにはいくつかの問題があります。
これを行うためのより良い方法はありますか?
編集:私が実際に意味しているので、ユニットを統合に変更しました。
EDIT2:これは私が言及したエッジのケースの例です。
各ファイルは、頂点とエッジで構成されるグラフを表します。これらの頂点とエッジはさまざまな方法で接続できるため、次のようになります。
v1 -- e1 --> v2 <-- e2 -- v3
とは違う
v1 -- e1 --> v2 -- e2 --> v3
つまり、エッジの方向が重要です。これが問題の範囲にあるかどうかはわかりませんが、頂点の数とエッジの数を手動で設定し、接続をランダムに生成するだけでは、関連するすべてのEdgeケースを考えるのは困難です。
最初に、あなたの目標が何であるかについて話しましょう:
あなたは明らかに「ファイルフォーマット」をテストしたくない-あなたはあなたの異なるFileReader
実装をテストしたい
自動テストにより、できるだけ多くの異なるタイプのエラーを見つけたい
その目標を完全に達成するには、私見ではさまざまな戦略を組み合わせる必要があります。
FileReader
の実装は、多くの異なる部分と関数で構成されます。それぞれを個別にテストする小さなテストを作成します。ファイルからデータを実際に読み取る必要がないように関数を設計します。これらの種類のテストは、ほとんどのEdgeケースをテストするのに役立ちます。FileReader
sによって正しく評価されていることを確認するのは難しい場合がありますが、最初の方法では明らかにされていないバグを見つけることが多いため、これを行う価値はあります。 2つの戦略。これらの種類のものを「統合テスト」とも呼ぶ人もいれば、「受け入れテスト」を好む人もいますが、実際にはこの用語は重要ではありません。私見では、「1つの価格で」3つの戦略すべてのメリットをもたらす「ショートカット」アプローチはありません。 Edgeのケースだけでなく、標準のケースや実際のケースの障害も検出したい場合は、少なくともいくらか、より多くの場合は多くの労力を費やす必要があります。幸い、これらのアプローチはすべて、自動で繰り返し可能なテストの作成に使用できます。
それ以外に、FileReader
sがそのデータを読み取るときにエラーをマスクしないことを確認する必要があります。組み込みのチェック/アサーションを作成し、内部で問題が発生したときに例外をスローします。これにより、テストコードに多くの影響を与えます。予期しない状況に対する明示的なテストファイルまたはテストケースがない場合でも、エラーを検出する可能性が高くなります。