2016-07-15 7 views
0

XDocumentを内部的に使用する2つのクラスXmlWriterとXmlReaderを使用して、倍精度、文字列、配列などの単純な値を格納/ユニットテスト:xmlリーダーをテストするための複雑なXDocumentを作成する

たXmlWriterクラスは、基本的に私はセットのunittestの(文字列、ダブル)メソッドを作成したい場合は、私は簡単に正しい要素かどうかを確認するために、文書のフィールドを使用することができ、今、この

class XmlWriter 
{ 
    internal XDocument document; 

    Set(string name, double value); 
    Set(string name, Int32 value); 

    … 
    SaveToFile(string filename); 
} 

のように見えますXPathを使用して追加されました。

​​

このメソッドは、XmlWriterでうまくいきます。ただし、XmlReaderはテストするのが非常に難しいです。私が見る限り、2つのオプションがあります。

まず、XmlWriterを使用して、XmlReaderの単体テストのXDocumentを設定できます。

//Quick and dirty to give you an idea 
writer.Set("something", 123); 
reader.document = writer.document; 
Assert.AreEqual(123, reader.Get("something"); 

今XmlReaderのためのユニットテストが重くたXmlWriterクラスに依存しているため、私は本当に好きではありません。私がXmlWriterクラスを破ると、XmlReaderの単体テストも確実に失敗します。

私が念頭に置いている別のオプションは、手作業でXDocumentを作成することです。特に、XmlStructureが少し複雑な場合は非常に面倒です。

あなたの意見はどうですか?

ありがとうございます。

+0

私の提案では、必要なプロパティを持つクラスを作成し、シリアライゼーションを使用してファイルからの書き込み/読み込みを行います。 – Fabio

答えて

1

あなたの実装を見ることはできませんが、あなたのクラスはXDocumentラッパーのように見えるので、ユニットテストではクラスがXDocumentで期待されるメソッドを呼び出すことをテストする必要があります。私はXDocumentを模擬し、あなたが期待するメソッドがSet、Get、Saveのために呼び出されることを確認します。さもなければ、あらゆる種類のXML可能性を単体テストしようとするでしょうし、XDocumentはすでにその作業を処理しています。

+0

私はあなたが何を意味するのか見ていますが、それはXElement、XAttributeなどのための模擬ラッパーを作成する必要があることを意味します。 Set( "Something.Whatever.SomethingElse"、123)を呼び出すと、writerクラスは要素、子要素、および属性からなるやや複雑な構造を追加します。私はxmlスキーマを使っていくつかの重要な事柄をチェックすることができましたが、テストする必要があるものはまだあります。また、XDocumentを使用してxml構造を作成する方法は通常複数あるため、MethodXが呼び出されたかどうかは気にしません。私が気にするのは、結果として得られる構造が正しいということだけです。 – edsplash

+0

スキーマを使用して文書を検証できませんか? – leetibbett

+0

[この投稿](http://stackoverflow.com/a/19733388/3407841)は、単体テスト用のxmlを検証するクールな方法を持っています – leetibbett

関連する問題