0

我对 .Net LINQ 还是很陌生,任何人都可以建议一种将这个 xml 过滤到 .Net 对象中的最佳和智能方法,因此在代码中我可以轻松地为测试套件执行所需的测试用例

<?xml version="1.0" encoding="utf-8" ?>
<TestSuites>
  <TestSuite name="TS1" canexecute ="true">
    <TestCase name="TC1" canexecute ="true"/>
    <TestCase name="TC2" canexecute ="false"/>
    <TestCase name="TC3" canexecute ="true"/>
  </TestSuite>
  <TestSuite name="TS2" canexecute ="false">
    <TestCase name="TC4" canexecute ="true"/>
    <TestCase name="TC5" canexecute ="false"/>
    <TestCase name="TC6" canexecute ="true"/>
  </TestSuite>
  <TestSuite name="TS3" canexecute ="false">
    <TestCase name="TC7" canexecute ="true"/>
    <TestCase name="TC8" canexecute ="false"/>
    <TestCase name="TC9" canexecute ="true"/>
  </TestSuite>
</TestSuites>

Expected output
Key   Value
TS1   TC1
      TC3
TS3   TC7
      TC9
4

1 回答 1

2

在我看来你想要这样的东西:

var query = doc.Descendants("TestSuite")
               .Where(x => (bool) x.Attribute("canexecute"))
               .Elements("TestCase")
               .Where(x => (bool) x.Attribute("canexecute"))
               .ToLookup(x => (string) x.Parent.Attribute("name"),
                         x => (string) x.Attribute("name"));

所以说:

  • 找到所有的测试套件...
  • ...可以执行
  • ...然后找到他们的测试用例...
  • ...可以执行
  • ...然后按测试套件名称分组,组中的值是测试用例名称

请注意,如果您有多个具有相同名称的测试套件,则使用上述查询,它们将被展平为一个组。

于 2013-04-11T17:57:14.407 回答