2014-08-28 2 views
5

Моя цель состоит в том, чтобы иметь «вложенные» данные в каждую из моих тестовых итераций модуля. Я хочу сделать это, чтобы у меня был набор данных для вызова, а также список действий (описываемых строками), которые затем интерпретируются и выполняются в моих тестах. В настоящее время у меня есть тесты, запущенные в VS2013 через Test Explorer, с использованием не вложенных данных (например, групп элементов данных/действий) правильно.Вложенный XML-код для анализа данных, управляемый данными

Например, мои данные могут быть:

<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> 

Я хотел бы получить доступ к элементам в данных согласно нормальной невложенных теста (dataElements["element"]), однако, я хотел бы иметь элементы Actions в списке. Я попытался следующие без успеха:

var data = TestContext.DataRow.GetChildRows("Iteration_Data"); 
var actions = TestContext.DataRow.GetChildRows("Iteration_Actions"); 

GetChildRows кажется правильный метод, но я не могу видеть все данные в возвращенном объекте, который напоминает мои XML-элементы - я получаю только 1 DataRow объект, который имеет ItemArray из 3 значений (0, {}, 0). Как получить список моих действий элементов, так что я могу получить доступ к тексту:

  • «EnterText_LoginName»
  • «EnterText_Password»
  • «ClickButton_Login»

ответ

0

Я имел свою же проблему, и я решил таким образом.

Это мой 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> 

datsource из 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); 
    } 
}