Как я могу использовать DataTable в качестве источника данных для моего теста с использованием mstest или nunit? - PullRequest
1 голос
/ 20 февраля 2020

У меня есть таблица данных, которая содержит данные, и я хочу использовать таблицу данных в качестве параметра для моего тестового примера в качестве тестирования, управляемого данными.

Любое предложение инфраструктуры тестирования (MsTest / Nunit) приветствуется c# как язык сценариев.

Сценарий: -

Мне нужно получить тестовые данные из TFS, которые я могу получить и сохранить в таблице данных. После сохранения в таблице данных мне нужно использовать ту же таблицу данных в моем тестовом примере в качестве параметра, чтобы мой тестовый набор выполнялся для всех параметров.

    [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 строками. Тестовый пример должен выполняться с 2 входными значениями из таблицы данных (i, .e-> 'QWERTY' и 'TEST').

Атрибут рабочего элемента представляет собой сопоставление для получения идентификатора тестового случая в TFS, который будет получать данные из TFS.

Я поражен и мне нужна помощь о том, как передать таблицу данных. в тестовом случае.

1 Ответ

1 голос
/ 20 февраля 2020

Для этого особого случая потребуется пользовательский 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) {
    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...