用于数据驱动单元测试的嵌套XML

用于数据驱动单元测试的嵌套XML,xml,unit-testing,visual-studio-2013,data-driven-tests,Xml,Unit Testing,Visual Studio 2013,Data Driven Tests,我的目标是在每个单元测试迭代中都有“嵌套”数据。我想这样做,这样我就可以调用一组数据,以及一系列操作(由字符串描述),然后在测试中解释和执行这些操作。我目前通过测试资源管理器在VS2013中正确使用非嵌套数据(例如,无数据/操作子项组)运行测试 例如,我的数据可以是: <TestData> <Iteration> <Data> <LoginName>admin</LoginName> <Pass

我的目标是在每个单元测试迭代中都有“嵌套”数据。我想这样做,这样我就可以调用一组数据,以及一系列操作(由字符串描述),然后在测试中解释和执行这些操作。我目前通过测试资源管理器在VS2013中正确使用非嵌套数据(例如,无数据/操作子项组)运行测试

例如,我的数据可以是:

<TestData>
  <Iteration>
    <Data>
      <LoginName>admin</LoginName>
      <Password>admin</Password>
    </Data>
    <Actions>
      <Action>EnterText_LoginName</Action>
      <Action>EnterText_Password</Action>
      <Action>ClickButton_Login</Action>
    </Actions>
  </Iteration>
</TestData>
GetChildRows似乎是正确的方法,但我无法在返回的对象中看到与我的XML元素相似的任何数据-我只得到1个
DataRow
对象,该对象的
ItemArray
值为3(0,{},0)。如何检索操作元素列表,以便访问文本:

  • “输入文本\登录名”
  • “输入文本\u密码”
  • “单击按钮\u登录”

    • 我也遇到了你同样的问题,我就是这样解决的

      这是我的XML

      <?xml version="1.0" encoding="utf-8" ?>
      <root>
        <parent>
          <field1>1234</field1>
          <field2>4700</field2>
          <child>
            <name>john</name>
            <age>2</age>
          </child>
          <child>
            <name>jack</name>
            <age>3</age>
          </child>
        </parent>
      </root>
      
      <?xml version="1.0" encoding="utf-8" ?>
      <root>
        <parent>
          <field1>1234</field1>
          <field2>4700</field2>
          <child>
            <name>john</name>
            <age>2</age>
          </child>
          <child>
            <name>jack</name>
            <age>3</age>
          </child>
        </parent>
      </root>
      
      [TestMethod]
      [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
                      "App_Data\\TestsInput\\Controllers\\Identity\\Tests\\Test.xml",
                      "parent",
                      DataAccessMethod.Sequential)]
      public void MyFirstTest()
      {
          //get a normal node XML
          int field1= Convert.ToInt32(TestContext.DataRow["field1"]);
      
          //get the list of fields
          DataRow[] datas = TestContext.DataRow.GetChildRows("parent_child");
      
          foreach (DataRow data in datas)
          {
              string name= data["name"].ToString();
              int age= Convert.ToInt32(data["age"]);
      
              //example
              Assert.IsTrue(age==2);
           }
      }