オブジェクトを xml に保存するための savefile メソッドを作成しました。しかし、NUnit でメソッドをテストする方法がわかりません。サンプル ファイルを手動で作成し、ファイル間で文字列を比較する必要がありますか? メソッドをテストするためのより良い方法はありますか?
ご回答有難うございます。
XML出力を検証しています。地獄へようこそ :)
私にとってうまくいった方法はXmlDocument
、メモリ内にオブジェクトを生成することでした。次に、SaveFile メソッドを実行し、それを別の にロードしますXmlDocument
。すべての要素と属性を比較しながら、両方の XmlDocuments を再帰的に調べます。
残念ながら、C# オブジェクトを使用して xml を記述すると、サイズが大きくかさばります。一度にサブセクションをテストすることをお勧めします。おそらく、保存ファイルには<FileList>
サブ要素、<Cups>
サブ要素、サブ要素があり<Rifles>
ます。その場合、一連のテストを作成して、全体的な出力ではなく、各サブセクションが正しく実行されることを確認します。
コードを示した方が簡単です。これを回避する私の方法は、抽象化のレイヤーを追加することです。Save メソッドで XmlWriter を直接処理しないでください。代わりに、それぞれがデータの小さな論理チャンクを xml に保存できるラッパーを作成し、それらをテストします。
各ラッパーには次のようなメソッドがあります
void Persist(XmlWriter writer);
Save にラッパーからデータを収集させます。つまり、データを適切に保存するのは Wrappers の責任ですが、それぞれがその小さなチャンクに対してのみ責任を負います。そこで、文字列を比較してテストできます(Persistメソッドに渡すXmlWriterにStringWriterを入れます)
オプション
これが私がしていることです-それは私にとってはうまくいきますが、あなたの仕様に合わないかもしれません.
分解では、スイートの一部として作成した可能性のあるファイルをすべて削除するようにします。はい、ファイルがテスト用のスクラッチファイルであることを確認してください
テスト メソッドでは、ファイルが存在する場合はファイルを削除し (ティアダウンで既に処理されているため、そうすべきではありません)、ファイルを XML に出力し、ファイルが存在することをアサートします。次に、ファイルをオブジェクト グラフまたは xml DOM に再読み込みし、必要な数のアサーションを通じて状態をクエリします。
ファイルへの書き込みを回避でき、設計で汎用テキスト ライターまたは xml ライターへの書き込みが許可されている場合は、ファイルの保存をバイパスし、代わりに呼び出しを文字列ライターに置き換えて、文字列をクエリするだけで済みます。はるかにクリーンですが、実際のファイルの永続性が機能しているかどうかはテストされません。
SaveFile( string fileName ) と SaveFile( XmlWriter writer ) を持つようにクラスを設計します。SaveFile( string filename ) は、名前付きファイルの XmlWriter を作成し、SaveFile( writer ) を呼び出すだけで済みます。モック XmlWriter を使用できる SaveFile( XmlWriter writer ) メソッドで広範な単体テストを実行します。SaveFile( string filename ) メソッドで、いくつかのエラー条件をテストします (それらを伝播するのではなく処理することが予想される場合)。エラー処理によっては、ファイルをまったく作成する必要がない場合があります。
ところで、したくない場合は、XmlWriter を直接使用してメソッドを公開する必要はありません。プライベートにして、アクセサーを使用してテストで呼び出すことができます。