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

5
我的目标是在每个单元测试迭代中有“嵌套”的数据。我想这样做是为了拥有一组可调用的数据,以及一组字符串描述的操作(由此在我的测试中进行解释和执行)。我目前正在使用VS2013中的Test Explorer运行测试,正确地利用非嵌套数据(例如没有Data/Actions子项组)。
例如,我的数据可能是:
<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>

我希望能够像常规非嵌套测试一样访问Data中的元素(dataElements["element"]),但是我希望将Actions元素放在列表中。我尝试了以下方法,但均未成功:
var data = TestContext.DataRow.GetChildRows("Iteration_Data");
var actions = TestContext.DataRow.GetChildRows("Iteration_Actions");

看起来 GetChildRows 方法是正确的方法,但我无法在返回的对象中看到任何类似于我的 XML 元素的数据 - 我只得到 1 个 DataRow 对象,它有一个值为 3 的 ItemArray(0,{},0)。如何检索我的 Action 元素列表以便我可以访问以下文本:

  • "EnterText_LoginName"
  • "EnterText_Password"
  • "ClickButton_Login"
1个回答

1

我曾经遇到了和你一样的问题,我是这样解决的。

这是我的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>

TestMethod的数据源必须是包含数据和要读取的节点子列表的父XML节点。 这是测试方法:
[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);
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接