Какая у .Net Core альтернатива атрибута DataSource для mstest?

#c# #selenium-webdriver #.net-core #mstest

#c# #selenium-webdriver #.net-core #mstest

Вопрос:

Из приведенного ниже следует, что атрибут DataSource больше не поддерживается в проектах .net Core MSTest. Итак, какова альтернатива этому?

Ссылка: https://learn.microsoft.com/en-us/visualstudio/test/how-to-create-a-data-driven-unit-test?view=vs-2019

Информация: .NET Core не поддерживает атрибут DataSource. Если вы попытаетесь получить доступ к тестовым данным таким образом в проекте модульного тестирования .NET Core или UWP, вы увидите ошибку, похожую на «‘TestContext’ не содержит определения для ‘DataRow’ и не может быть найден доступный метод расширения ‘DataRow’, принимающий первый аргумент типа ‘TestContext’ (вам не хватает директивы using или ссылки на сборку?)».

Ответ №1:

7 сентября 2020 года — Обходного пути нет

По этому поводу существует открытая проблема issue-233, и никаких комментариев о том, когда это можно исправить. Есть несколько обходных путей:

DynamicDateAttribute (пример CSV)

 private static string[] SplitCsv(string input)
{
    var csvSplit = new Regex("(?:^|,)("(?:[^"] |"")*"|[^,]*)", RegexOptions.Compiled);
    var list = new List<string>();
    foreach (Match match in csvSplit.Matches(input))
    {
        string value = match.Value;
        if (value.Length == 0)
        {
            list.Add(string.Empty);
        }

        list.Add(value.TrimStart(','));
    }
    return list.ToArray();
}

private static IEnumerable<string[]> GetData()
{
    IEnumerable<string> rows = System.IO.File.ReadAllLines(@"ResourcesNameAddressCityStateZip.csv").Skip(1);
    foreach (string row in rows)
    {
        yield return SplitCsv(row);
    }
}

[TestMethod]
[DynamicData(nameof(GetData), DynamicDataSourceType.Method)]
//x [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"ResourcesNameAddressCityStateZip.csv", "NameAddressCityStateZip#csv", DataAccessMethod.Sequential)]
public void TestMethod1(string input, string expected)
{
    // Arrange
    //x string input = _testContext.Properties["Data"].ToString(); //x _testContext.DataRow["Data"].ToString();
    //x string expected = _testContext.Properties["Expected"].ToString(); //x _testContext.DataRow["Expected"].ToString();
    var parser = _serviceProvider.GetService<Parser>();

    // Act
    string actual = parser.MultiParser(input, ModeType.NameAddressCityStateZipCountry).ToString();

    // Assert
    Assert.AreEqual(expected, actual);
}
  

но у этого есть недостатки.

Перенесите его самостоятельно в код

Как показано в комментарии здесь

Дождитесь реализации

Комментарии:

1. @Kataras — Спасибо! Мне нужно прочитать файл данных xml, есть ли способ, которым я могу написать специальный класс и использовать его в качестве атрибута в моих методах тестирования (MS test2)? Если да, не могли бы вы просветить меня?