1

XML をデータソースとして使用するこのコード サンプルがあるとします。

[DeploymentItem("Ita_ResultArea_CompaniesList\\snapshot.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
            "|DataDirectory|\\Ita_ResultArea_CompaniesList\\snapshot.xml", 
            "Test", DataAccessMethod.Sequential)]
[TestMethod]
public void Ita_ResultArea_Tdd_MinimalRequest()
{
    var input = TestContext.DataRow["Input"];
    Assert.IsNotNull(input);
}

TestContext.DataRow["Input"]から内部ノードを読み取れないのはなぜですか?

XML コンテンツは次のとおりです。

<TestData>

<Test>
  <Input>
    <Query>
      <Expression>laser &lt;IN&gt; FTXT</Expression>
    </Query>
  </Input>
  <Output>
    <someOut>ss</someOut>
  </Output>
</Test>

<Test>
  <Input>
    <Query>
      <Expression>laser &lt;IN&gt; FTXT</Expression>
    </Query>
  </Input>
  <Output>
    <someOut>ss</someOut>
  </Output>
</Test>

</TestData>

MSDN フォーラムで、多くのレベルの xml ファイルを読み取ることができないというスレッドをいくつか見つけました。次のような簡単な例です。

<TestData>
 <Test>
  <sample1>some text</sample1>
  <sample2>some test</sample2>
 </Test>
</TestData>

このように TestContext.DataRow["sample1"]は正常に動作します。


更新 結果として、次の方法でxmlファイルを処理しました(ソースxmlを見てください):

<TestData>
  <Test>
    <Expression1>laser &lt;IN&gt; FTXT</Expression1>
    <someOut1>ss<someOut1>
    <Expression2>laser &lt;IN&gt; FTXT</Expression2>
    <someOut2>ss<someOut2>
  </Test>
  <!-- another test data-->
  <Test>
    <Expression1>lorem ipsum</Expression1>
    <someOut1>found<someOut1>
    <Expression2>oneWord</Expression2>
    <someOut2>found<someOut2>
    <Expression3>long data</Expression3>
    <someOut3>found<someOut3>
  </Test>
</TestData>

ご覧のとおり、これはあまり優れた解決策ではありませんが、手作りの回避策です。xml の内部レベルを最初のレベルのみに結合し、意味のあるデータのみを取得しました。そのため、テストを実行する .NET コードでは、テスト データを使用して完全な階層を手動で復元する必要があります。

私は会社で同僚から批判されましたが、別の方法はBClaydonが提案したとおりでした。

Microsoft は、この制限について何年も気にしていないようです。

4

1 に答える 1

1

単体テストがどれほど広範囲に及ぶかはわかりませんが、XML が何らかの「コントロール」データ セットと一致することを検証する場合は、データセットを使用する必要があります。現在、「既知の適切な」トランザクション クエリ、SQL テーブル、またはデータセットに対して SSRS レポートの単体テストを行っています。データセット内の XML は、ノードの名前を持つ論理データテーブルに分割されます。ノード (データテーブル)、行インデックス、列名、セルなどの名前を呼び出すことができるようになりました。

于 2013-11-08T16:33:19.303 に答える