MsTest - XML数据源:您可以将整个XML检索为XElement吗?

时间:2017-04-04 14:58:02

标签: xml datasource mstest

所以,这就是问题所在。 我们现在正在尝试使用XML作为数据源,如下所示:

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", 
    @"Datasets\test01.xml", "test", DataAccessMethod.Sequential)]

我的(已经存在的)测试自动化框架完全用于解析和处理作为XElement参数传递的测试数据。

但是,似乎使用上面的代码会导致DataRow包含DataTable,而XElement xmlData = testContext.DataRow["login"]; 会将XML结构分解为各个子节点。另外,根据this discussion,XML应该包含一个表(最多两层)?

我想要实现的就是这样,但是我错过了DataRow和XElement对象之间的链接

login

因此,从此XML中返回 <test> <login>...</login> <actions>...</actions> </test> 元素。编辑:此元素本身将包含多个子节点(深度可以是多个级别)。

val flights: Seq[Flight] = ...
// Let's represent the result in a Map[Airport, (Left, Arrived)]
val res: Map[String, (Int, Int)] = 
  flights
    .flatMap(flight => Seq((flight.origin, true), (flight.destination, false)))  // Seq[(String, Boolean)]
    .groupBy { case (airport, _) => airport }  // Map[String, List[(String, Boolean)]] 
    .mapValues { grouped =>
      val left = grouped.count { case (_, isOrigin) => isOrigin }
      val arrived = grouped.count { case (_, isOrigin) => !isOrigin }
      (left, arrived)
    }

1 个答案:

答案 0 :(得分:0)

它的工作原理如下。但是,问题是DataRow.Table当前返回整个XML而不仅仅是假定的当前数据流。

        using (var ms = new MemoryStream())
        {
            testContext.DataRow.Table.WriteXml(ms);
            var xmlData = XElement.Parse(Encoding.UTF8.GetString(ms.ToArray()));
            Console.Write(xmlData.ToString());
            return xmlData.Element(rowName).Element(tag);
        }