如何使用 mstest 或 nunit 将 DataTable 用作我的测试用例的数据源?

How can i use DataTable as a data source for my test case using mstest or nunit?

我有一个包含数据的数据 table,我想使用数据 table 作为我的测试用例的参数作为数据驱动测试。

任何测试框架 (MsTest/Nunit) 的建议都欢迎使用 c# 作为脚本语言。

场景:-

我需要从 TFS 获取测试数据,我可以检索这些数据并将其存储在数据 table 中。保存数据 table 后,我需要在我的测试用例中使用相同的数据 table 作为参数,以便我的测试用例 运行 用于所有参数。

    [DataTestMethod]
    [WorkItem(13)]
    public void GetTestValuesFromTestParameter()
    {
        //Code to get the data from TFS
       var method = MethodBase.GetCurrentMethod();
       var attr = (WorkItemAttribute)method.GetCustomAttributes(typeof(WorkItemAttribute), true)[0];
       GetTableItemsFromTestCase(workItemId);
    }

    private DataTable GetTableItemsFromTestCase(int workItemId)
    {
        //Return the data table items from TFS
    }

假设 TFS 中的测试用例有 2 个参数 [Name,FirstName],我将准备值为

的测试数据
//////Data table Start /////
   [Name] [FirstName] 
 1. ["QWERTY","LAST"] 
 2. ["TEST","TEST"] 
//////Data table END /////

现在我有一个包含 2 行的数据 table。测试用例应该 运行 具有来自数据 table 的 2 个输入值(i,.e-> 'QWERTY' 和 'TEST')。

工作项属性是一个映射,用于获取 TFS 中测试用例的 ID,它将从 TFS 获取数据。

我在这里很吃惊,需要有关如何将数据 table 传递给测试用例的帮助。

这种特殊情况需要自定义 ITestDataSource

数据源将从TFS 获取数据并将该数据传递给测试用例。

public class WorkItemAttribute : Attribute, ITestDataSource {
    private readonly int workItemId;

    public WorkItemAttribute(int workItemId) {
        this.workItemId = workItemId;
    }

    public IEnumerable<object[]> GetData(MethodInfo methodInfo) {
        var dataTable = GetTableItemsFromTestCase(workItemId);            
        yield return new object[] { dataTable };
    }

    private DataTable GetTableItemsFromTestCase(int workItemId) {
        //Return the data table items from TFS
    }

    public string GetDisplayName(MethodInfo methodInfo, object[] data) {
        if (data != null)
            return string.Format(CultureInfo.CurrentCulture, "{0} WorkItem {1} - ({2})", methodInfo.Name, workItemId, string.Join(",", data));

        return null;
    }
}

这就像您自己版本的 DynamicDataDataRow 属性

然后测试可以使用像

这样的数据源
[DataTestMethod]
[WorkItem(13)]
public void GetTestValuesFromTestParameter(DataTable data) {
    //...
}