Использование типа List <string>в качестве параметра DataRow - PullRequest
0 голосов
/ 08 ноября 2018

Как мы можем передать List<string> параметру DataRow в [DataTestMethod]

Я пытаюсь что-то вроде:

[DataTestMethod]
[DataRow(new List<string>() {"Iteam1"})]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(IEnumerable<string> myStrings)
{
// ...    
}

Я получаю ошибку компиляции:

Аргументом атрибута должно быть константное выражение, выражение typeof или выражение создания массива типа параметра атрибута

Можно ли передать список таким образом?

1 Ответ

0 голосов
/ 12 декабря 2018

Как отмечается в сообщении об ошибке, вы не можете использовать List s в атрибутах, но вы можете использовать массивы.

[DataTestMethod]
[DataRow(new string[] { "Item1" })]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(string[] myStrings)
{
    // ...  
}

Чтобы действительно использовать List или любой другой тип, который вы можете использовать DynamicDataAttribute.

[DataTestMethod]
[DynamicData(nameof(GetTestData), DynamicDataSourceType.Method)]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(IEnumerable<string> myStrings)
{
    // ...  
}

public static IEnumerable<object[]> GetTestData()
{
    yield return new object[] { new List<string>() { "Item1" } };
}

Метод или свойство, данное DynamicDataAttribute, должно возвращать IEnumerable массивов объектов.Эти объектные массивы представляют параметры, которые будут переданы в ваш метод тестирования.

Если у вас всегда есть фиксированное количество элементов в списке, вы можете вообще не использовать списки

[DataTestMethod]
[DataRow("Item1", "Item2")]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(string string1, string string2)
{
    // ...  
}
...