2012-02-26 13 views
10

Ho implementato un test guidato dai dati utilizzando il framework MsTest.Come si ottiene il numero di iterazione/linea da TestContext nei test basati sui dati?

Mi chiedevo se c'era un modo per ottenere il numero di iterazione/linea del codice di test corrente dall'oggetto TestContext?

Per quanto posso vedere, l'unica proprietà rilevante per DDT è DataRow che consente di ottenere informazioni per l'iterazione corrente dall'origine dati, ma non vedo alcuna proprietà che mi dia ciò di cui ho bisogno.

risposta

15

Prova questo:

int currentIteration = TestContext.DataRow.Table.Rows.IndexOf(TestContext.DataRow); 
+2

Grazie, che ha funzionato :) – user1039580

+0

Devi aver guardato il Debugger e Inspect per scoprirlo. Non l'ho visto abbastanza presto. MSDN non menziona nemmeno questa tabella di oggetti utili. –

0
private readonly PropertyInfo _rowIdProp = typeof(System.Data.DataRow).GetProperty("rowID", BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.Instance); 

.. 

// No datarow means only one iteraton 

var currentIteration = DataRow == null ? 1 : (Int64)_rowIdProp.GetValue(DataRow, null); 
0

questo è senza l'attributo DataSource ma posso dirvi che iterare da essa sé senza il ciclo for

 for (int i = 0; i < x; i++) 
     { 
      int currentIteration = TestContext.DataRow.Table.Rows.IndexOf(TestContext.DataRow); 
      DataTable dt = TestContext.DataRow.Table; 
      int rowCount = dt.Rows.Count; 

      DataRow secondRow = dt.Rows[i]; 
      string name = secondRow["name"].ToString(); 
      int Balance = Convert.ToInt32(secondRow["Balance"]); 
      int Amount = Convert.ToInt32(secondRow["Amount"]); 
      int Count = Convert.ToInt32(secondRow["Count"]); 
      Assert.AreEqual(Balance, Amount); 

     } 
Problemi correlati