问题 如何在数据驱动测试中从TestContext获取迭代/行号?


我使用MsTest框架实现了数据驱动测试。

我想知道是否有办法从TestContext对象获取当前测试代码的迭代/行号?

据我所知,与DDT相关的唯一属性是DataRow,它可以从数据源获取当前迭代的信息,但我没有看到任何属性可以提供我需要的东西。


7715
2018-02-26 16:39


起源



答案:


尝试这个:

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

16
2018-02-26 17:20



谢谢,这工作:) - user1039580
您必须查看调试器和Inspect才能找到它。我很快就没有看到它。 MSDN甚至没有提到这个有用的对象表。 - The Original Android


答案:


尝试这个:

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

16
2018-02-26 17:20



谢谢,这工作:) - user1039580
您必须查看调试器和Inspect才能找到它。我很快就没有看到它。 MSDN甚至没有提到这个有用的对象表。 - The Original Android


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
2018-02-27 08:21





这是没有DataSource属性但我可以告诉你它没有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);

        }

0
2017-11-17 11:21