1

オブジェクトのシリアライゼーション ユニット テストを作成していて、オブジェクトの XML を C# コード ユニット テスト ファイル内にインライン化したいと考えています。インライン化する最も簡単な方法は、@ プレフィックスを文字列として使用することです。

var xml = @"<Something> 
                 <AnotherSomething/>
                 <AnotherSomething/>
            </Something>";

私の問題は、私の XML に属性が含まれており、それが非常に大きいことです。インライン化するには、すべての XML を調べて、XML の各 """ にエスケープを入れる必要があります。非常に大きな XML ノードに対してそれを行うと、難しいし、それを維持するのは難しいだろう -

var xml = @"<Something Att=""s"" Att2=""gg""> 
                     <AnotherSomething/>
                     <AnotherSomething/>
           </Something>";

XML を別のファイルとして配置し、展開アイテムとしてマークしたくありません -

[DeploymentItem("Something.xml")]

単体テストでディスクからファイルをロードする必要があるため、単体テストがはるかに遅くなり、それらの多くがある可能性があります。

XML を変更せずにコード内に配置する他の方法はありますか?

4

3 に答える 3

1

xml 文字列の代わりに、linq to xml オブジェクトを使用して xml 表現を作成できます。2 番目の例は次のようになります。

var xml = 
    new XElement("Something",
        new XAttribute("Att", "s"),
        new XAttribute("Att2", "gg"),
        new XElement("AnotherSomething"),
        new XElement("AnotherSomething"));

これを使用するその他の理由は、xml の有効性を保証すること、特殊文字を自動エスケープすること、文字列に変換する際の書式設定オプションが増えること、および作業がはるかに簡単になることです。

于 2014-03-04T08:27:51.053 に答える
0

いいえ、コンパイラ/パーサーはそれを許可しません。

すべての xml を 1 つのファイル (ある種の有効な構造) に入れ、ユーティリティ クラスに全体をロードさせ、テスト間でキャッシュさせることができます。

于 2014-03-04T08:10:58.283 に答える