2010-12-16 8 views
1

私のようなXML構造の変形ユニットテストしようとしています:他のXMLファイルを再帰的に指し示すXMLファイルの変更をユニットテストするにはどうすればよいですか?

<element2> 
    <open file="anotherfile.xml"> 
    <happytag/> 
</element2> 

そしてanotherfile.xmlがどのように見えること:

<element3> 
    <sadtag/> 
</element3> 

正しいを

<element1> 
    <open file="otherfile.xml"> 
</element1> 

otherfile.xmlが含まれていると変更は、開くファイルからコードをコピーして、というコードに貼り付けますタグ。そのため、私のような構造を期待してい:

<element1> 
    <element2> 
     <element3> 
      <sadtag/> 
     </element3> 
     <happytag/> 
    </element2> 
</element1> 

私が午前問題は、私はこのような構造の作成をテストするユニットについて移動する方法がわからないだということです。理想的には、私が遠くに試みたことは(成功しなかった)、構造を作成するためにファイルシステムを呼び出す必要がないように、この単体テストを作成することです。これを行うには、私はファイルを開き、入力ストリームになりすましモックオブジェクトを作成しますが、実際には、私はこのアプローチを持っている問題は、私ということです

<element1> 
    <open file="otherfile.xml"> 
</element1> 

のテキストから作成されたストリームを返します私が試したもう一つはopen file="&lt;element3&gt;...&lt;/element3&gt;">のように、open file=""anotherfile.xmlのテキストを置くことです

<element2> 
    <open file="anotherfile.xml"> 
    <happytag/> 
</element2> 

:モックオブジェクトは、テキストを返すようにotherfile.xmlのテキストを挿入する方法を把握することはできません。これは、XMLパーサが有効なXMLではないと文句を言うため機能しません。

テストを実行する前にこれらのXMLファイルを文字列から作成し、テスト後に削除することもできます。

答えて

1

ファイルアクセサインターフェイスを作成し、次に2つの実装を提供します。 1つの実装は実際にファイルシステム上の項目を開きます。他の実装は、オブジェクト内のマップに格納されたデータにアクセスします。

だからあなたのテストオブジェクトは、次のように構築することになります。

file_data = { 
    "otherfile.xml": "<element2>\n <open file=\"anotherfile.xml\">\n <happytag/>\n</element2>", 
    "anotherfile.xml": "<element3>\n <sadtag/>\n</element3>" 
} 
accessor = TestFileAccessor(file_data) 
+0

本当に良いアイデアのように思われます!どうもありがとう! – Davidann

関連する問題