У меня есть тест-метод следующим образом:Передайте массив как значение атрибута
[TestCase(new string[] { "1", "2", "5" }, Result = true)]
bool AllocateIDsTest1(IEnumerable<string> expected)
{
var target = ...
var actual = target.AllocateIDs(expected);
return actual.SequenceEqual(expected);
}
Однако я получаю компилятор ошибку:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type.
Вероятно, компилятор не может различать между следующие конструкторы:
TestCase(params object[] args, Named Parameters);
и
TestCase(object ob1, Named Paramaters);
поскольку new string[] { "1", "2", "5" }
может быть разрешен как для params object[]
, так и для object
.
От this post Я знаю, что строковый массив должен быть доступен для передачи как константы компиляции.
Как я могу предоставить массив строк для TestCase
?
Отлично обходной путь. Другой вариант - использовать TestCaseSource, см. Документы. –
Даже не обходной путь. :-) Именно так предполагается использовать TestCase. Ошибка компилятора заключается не в том, что вы передали в массиве - это явно разрешено для атрибутов. Это потому, что вы просите конструктор атрибутов динамически создавать массив с помощью new. C# этого не допускает. – Charlie
@Charlie Итак, как именно нужно назначать массив для работы атрибута, когда вы говорите «это явно разрешено по атрибутам»? Через поле 'static'? – HimBromBeere