2014-08-28 22 views
5

Amacım, birim test yinelemelerinin her birinde 'iç içe' verilere sahip olmaktır. Bunu yapmak istiyorum, böylece bir dizi Veriye sahip olmanın yanı sıra daha sonra testlerimde yorumlanıp gerçekleştirilebilecek bir Eylemler listesi (dizelerle anlatılan) bir listeye de sahip olabilirim. Şu anda, test edilmemiş veriyi (örn. Veri/İşlem alt öğe grupları) doğru kullanarak VS2013'te Test Gezgini ile çalışan testlerim var.Veriye Dayalı Birim Testi için İç İçe XML

Örneğin, benim veri olabilir:

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

Ben normal olmayan iç içe testi (dataElements["element"]) uyarınca Veri öğeleri erişmek istiyorum, ancak, Eylemler elemanları istiyorum bir listede. Hiçbir başarı ile şu denedi:

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

GetChildRows doğru yöntemi görünüyor, ama benim XML öğeleri benzeyen döndürülen nesnenin tüm verileri görmek alamıyorum - Ben sadece bir ItemArray sahiptir 1 DataRow nesneyi almak 3 değerin (0, {}, 0). Ben metin erişebilmeleri için nasıl Eylem unsurların bir listesini almak yapın:

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

cevap

0

Ben senin aynı sorunu vardı ve Bu şekilde çözdüm.

Bu

TestMethod ait datsource veri ve okumak istediğiniz düğüm çocukların listesini içeren düğüm XML ebeveyn olmalıdır benim 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> 

olduğunu. Bu, şu yöntemdir:

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