2012-02-26 18 views
10

Zaimplementowałem test oparty na danych wykorzystujący framework MsTest.Jak uzyskać numer iteracji/linii z TestContext w testach opartych na danych?

Zastanawiam się, czy istnieje sposób, aby uzyskać numer iteracji/linii bieżącego kodu testowego z obiektu TestContext?

O ile widzę, jedyną właściwością związaną z DDT jest DataRow, która umożliwia uzyskanie informacji o bieżącej iteracji ze źródła danych, ale nie widzę żadnej właściwości, która daje mi to, czego potrzebuję.

Odpowiedz

15

Spróbuj tego:

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

Dzięki, że pracował :) – user1039580

+0

Musisz sprawdzić Debugger i sprawdzić, aby to znaleźć. Nie widziałem tego wystarczająco szybko. MSDN nawet nie wspomina o tej użytecznej tabeli obiektów. –

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

to bez atrybutu DataSource, ale mogę powiedzieć, że to przez to samo iteracji bez pętli 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); 

     }