2014-08-28 14 views
5

Mein Ziel ist es, Daten in jeder meiner Unit-Test-Iterationen "verschachtelt" zu haben. Ich möchte dies tun, damit ich eine Reihe von Daten aufrufen kann, sowie eine Liste von Aktionen (beschrieben durch Strings), die dann in meinen Tests interpretiert und ausgeführt werden. Momentan laufen Tests in VS2013 über den Test Explorer unter Verwendung nicht verschachtelter Daten (z. B. keine Untergruppen für Daten/Aktionen) korrekt.Verschachtelte XML für datengetriebenen Einheitstest

Zum Beispiel könnten meine Daten sein:

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

ich die Elemente in Daten gemäß einem normalen nicht-verschachtelten Test zugreifen möchte (dataElements["element"]), jedoch würde ich gerne die Aktionen Elemente haben in einer Liste. Ich habe die folgenden ohne Erfolg versucht:

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

GetChildRows scheint die richtige Methode, aber ich bin nicht in der Lage alle Daten in der zurückgegebene Objekt zu sehen, dass meine XML-Elemente ähnelt - ich nur 1 DataRow Objekt, das ein ItemArray hat von 3 Werten (0, {}, 0). Wie kann ich eine Liste meiner Action-Elemente abzurufen, damit ich den Text zugreifen:

  • "EnterText_LoginName"
  • "EnterText_Password"
  • "ClickButton_Login"

Antwort

0

Ich hatte Ihre gleiche Problem und Ich habe mich auf diese Weise aufgelöst.

Das ist mein 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> 

Die datsource von Testmethod muss der Knoten XML Eltern sein, die Daten und die Liste der Knoten Kinder enthält, die Sie lesen möchten. Dies ist die Testmethode:

[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); 
    } 
}