如何使用 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;
}
}
这就像您自己版本的 DynamicData
或 DataRow
属性
然后测试可以使用像
这样的数据源
[DataTestMethod]
[WorkItem(13)]
public void GetTestValuesFromTestParameter(DataTable data) {
//...
}
我有一个包含数据的数据 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;
}
}
这就像您自己版本的 DynamicData
或 DataRow
属性
然后测试可以使用像
这样的数据源[DataTestMethod]
[WorkItem(13)]
public void GetTestValuesFromTestParameter(DataTable data) {
//...
}