Здесь есть две разные проблемы.
Ошибка "Аргумент атрибута должен быть константным выражением, выражением typeof или выражением массива типа параметра атрибута" исходит от компилятора. Он описывает ограничение любых конструкторов атрибутов в. NET, а не только NUnit. Если вы хотите передать аргументы в самом конструкторе, вы должны использовать постоянные значения.
Однако, похоже, вы не хотите передать аргументы в конструкторе. Вместо этого вы хотели бы сослаться на список, объявленный отдельно. NUnit имеет набор атрибутов для выполнения именно этого. Вы должны использовать один из них, например, ValueSourceAttribute
...
public class ObjectBaseCalls : ApiTestBase
{
static ReadOnlyCollection<string> AllTypes = new ReadOnlyCollection<string>(new List<string>() { "Value1", "Value 2" });
[Test]
public void ObjectCanBePostedAndGeted([ValueSource(nameof(AllTypes))] string type)
{
//My test
}
}
В качестве альтернативы, поскольку у вас есть только один аргумент метода, вы можете использовать TestCaseSourceAttribute
...
public class ObjectBaseCalls : ApiTestBase
{
static ReadOnlyCollection<string> AllTypes = new ReadOnlyCollection<string>(new List<string>() { "Value1", "Value 2" });
[TestCaseSource(nameof(AllTypes))]
public void ObjectCanBePostedAndGeted(string type)
{
//My test
}
}
Любой из них должен работать. Какой из них вы используете здесь - вопрос стиля c.
Вторая проблема связана с использованием PairWiseAttribute
. Он используется (наряду с несколькими другими «объединяющими атрибутами», когда у вас есть тест с несколькими параметрами, указанными с помощью Values
или ValueSource
, и вы хотите, чтобы NUnit комбинировал их различными способами. В ситуации с одним параметром это делает ничего. Вот почему я удалил его из своих примеров выше.
Если вы действительно намеревались написать тест с более чем одним параметром и попросили NUnit решить, как их объединить, я думаю, вам нужно задать другой вопрос, где Вы объясняете, что вы пытаетесь совершить sh.