1

私はレガシーなJavaコードといくつかのsax解析を持っています。それらの sax パーサーの単体テストを書きたいと思っています。

sax パーサーの実装は簡単です。や などのいくつかのメソッドを拡張およびオーバーライドするクラスのようなものDefaultHandlerです。startElementendElement

Sax パーサーは、解析する xml が巨大であるため、オブジェクトの大きなツリーを提供します。

sax パーサーの単体テストを作成しようとすると、次のような大きなテスト メソッドが得られます。

  • リソースからの XML ファイルのテスト バリアントの読み込み
  • sax パーサーのインスタンスにその XML を解析するように要求する
  • 解析結果の取得
  • ツリー内の各オブジェクトの各フィールドをアサートすることにより、解析されたオブジェクト ツリーを期待されるものと比較する

すでに述べたように、XML は巨大です。そのため、結果オブジェクトを比較すると、大量のアサートが発生します。

何か提案してください。レガシー コードに含まれるすべての sax パーサーに対して、このような大規模なテスト メソッドを記述したくありません。

4

1 に答える 1

0

これも試してみてください。

public void testMySaxParser() throws Exception {
InputStream xml = getTestDocument();
// イベントを記録して検証するカスタム ハンドラーを作成し
ます
。 //後で実際の SAXParser によって繰り返されると予想される
一連のイベントを // 生成しようとしていることをハンドラに伝えます。 handler.startRecording(); handler.startDocument(); handler.startElement("", "", "root", new Attributes()); handler.startElement("", "", "child", new Attributes()); handler.characters("何らかのテキスト".






handler.endElement("", "", "子");
handler.startElement("", "", "child", new Attributes());
handler.characters("もう少しテキスト".toCharArray(), 0, 14);
handler.endElement("", "", "子");
handler.endElement();
handler.endDocument();
// 「期待値の記録」が完了
し、 // 「再生」モードに移行する必要があることをハンドラに伝えます
。 handler.stopRecording();
// パーサーを実行して、実際のイベントをハンドラーに生成します
getSAXParser().parse(xml, handler);
// 予想されるイベントが発生したことを確認するようにハンドラ オブジェクトに要求します
。 handler.verify(); }

于 2013-02-20T08:33:39.570 に答える